代码如下。我扩展了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);
}
}
答案 0 :(得分:0)
修好了。 我的主要活动是ViewPager,它负责滑动操作。 当我在其中移动TextView时,ViewPager将占有该事件。 为了解决这个问题,我按照this问题中的描述覆盖了ViewPager。