移动TextView时获得ACTION_CANCEL

时间:2015-06-21 04:21:24

标签: android ontouchevent

代码如下。我扩展了TextView并覆盖了其onTouchEvent方法。我想左右移动整个TextView(不是文本本身)。 以下代码有效,但它只允许我移动TextView大约0.5厘米,而不是我得到ACTION_CANCEL事件。 TextView宽度为204dp。 任何人都可以给我一些线索,为什么会这样?谢谢。

 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);
}

}

1 个答案:

答案 0 :(得分:0)

修好了。 我的主要活动是ViewPager,它负责滑动操作。 当我在其中移动TextView时,ViewPager将占有该事件。 为了解决这个问题,我按照this问题中的描述覆盖了ViewPager。