简体   繁体   English

移动TextView时得到ACTION_CANCEL

[英]got ACTION_CANCEL when moving a TextView

The code is as following. 代码如下。 I extended a TextView and overrided its onTouchEvent method. 我扩展了TextView并覆盖了它的onTouchEvent方法。 I want to move the whole TextView (not the text itself) left and right. 我想左右移动整个TextView (而不是文本本身)。 The following code sort of works, but it only let me move the TextView about 0.5 centimeters, and than I got a ACTION_CANCEL event. 以下代码可以正常工作,但是它只允许我将TextView移动约0.5厘米,然后才收到ACTION_CANCEL事件。 The TextView is 204dp wide. TextView的宽度为204dp。 Anyone can give me some clue why this happens? 任何人都可以给我一些线索为什么会发生这种情况? Thank you. 谢谢。

 package com.zhangfuwen.tenkhours;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Button;
import android.widget.TextView;
import android.util.AttributeSet;



/**
 * Created by dean on 2015/6/20.
 */
public class MyTextView extends TextView {
private int mHistoricalX;
public MyTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mHistoricalX = (int)x;
            Log.e("haha", "down.");
            return true;
            //break;
            //return super.onTouchEvent(event);
        case MotionEvent.ACTION_MOVE:
            Log.e("haha", "move.");
            float diff = x - mHistoricalX;
            this.setX( this.getX() + diff);
            invalidate();
            return true;
            //super.onTouchEvent(event);
            //return true;
        case MotionEvent.ACTION_UP:
            //TODO:启动定时器,进行倒计时
            //
            Log.e("haha", "up.");
            diff = x - mHistoricalX;
            this.setX( this.getX() + diff);
            return true;
            //break;
        case MotionEvent.ACTION_OUTSIDE:
            Log.e("haha","outside");
            return true;
        case MotionEvent.ACTION_CANCEL:
            Log.e("haha","cancel");
            return false;
        case MotionEvent.ACTION_HOVER_MOVE:
            Log.e("haha","hover move");
            return true;

            //}
            //return super.onTouchEvent(event);
        default:
            Log.e("haha","action is " + Integer.toString(event.getAction()));
            return true;
            //break;


    }
    //return super.onTouchEvent(event);
}

} }

Got it fixed. 修好了。 My main activity is a ViewPager which is responsible for swipe action. 我的主要活动是ViewPager,它负责滑动操作。 When I move the TextView inside it, the ViewPager takes possession of the event. 当我在其中移动TextView时,ViewPager拥有该事件。 To fix it, I overrided the ViewPager as described in this question. 要解决问题,我按照问题中的说明覆盖了ViewPager。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM