关于Android中View滑动知识的一点个人理解

     View是Android中重要性不亚于四大组件的存在。今天主要看看Android中关于View滑动的一些小知识点       

     View的滑动在Android中有三种方式:       1.使用scrollTo或  scrollBy;2.使用动画;3.改变布局参数(改变LayoutParams)       

     下面是一个随手指在屏幕上随意滑动的小例子(Android开发艺术探索 这本书上的):     

       其中有一些小的细节一直没有搞明白,今天看书的时候突然明白了,记下笔记:        

       代码如下:

      

       


 public class MoveView extends TextView {

	private int mLastX;
	private int mLastY;

	public MoveView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		boolean isIntercept = false;
		int rawX = (int) event.getRawX();
		int rawY = (int) event.getRawY();
		Log.e("rawX", String.valueOf(rawX));
		Log.e("rawY", String.valueOf(rawY));
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			isIntercept = true;
			break;
		case MotionEvent.ACTION_MOVE:
			int dx = rawX - mLastX;
			int dy = rawY - mLastY;
			Log.e("dX", String.valueOf(dx));
			Log.e("dY", String.valueOf(dy));
			Log.e("TranslationX", String.valueOf(getTranslationX()));
			Log.e("TranslationY", String.valueOf(getTranslationY()));
			int dx1 = (int) getTranslationX() + dx;
			int dy1 = (int) getTranslationY() + dy;
			setTranslationX(dx1);//此处改为dx下面改为dy后,是无法实现随手指滑动的,
			setTranslationY(dy1);//具体原因是因为 dx与dy是当前相对于屏幕的坐标与前一次相对于屏幕的坐标之差
			                    //而当手指从MoveView上滑动,这个dx与dy是有一个范围的,就是MoveView左上角坐标与MoveView右下角坐标之差(可能为正也可能为负);
			                    //也就是说|dx|<=MoveView宽度  |dy|<=MoveView高度,所以改为dx及dy后,MoveView只能稍微在一个范围内移动,而无法实现全屏移动。

			isIntercept = true;
			break;
		case MotionEvent.ACTION_UP:
			isIntercept = false;
			break;
		default:
			break;
		}
		mLastX = rawX;
		mLastY = rawY;
		return isIntercept;
	}

}
         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值