一起Talk Android吧(第四百五十三回:给View添加滑动事件二)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百五十三回:给View添加滑动事件二)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们大家好,上一回中咱们说的例子是"给View添加滑动事件",这一回中继续说该例子。闲话休提,言归正转,让我们一起Talk android吧!
整体思路
还使用上一章回中自定义的View,添加滑动事件的方式也不变。添加滑动事件后View会跟着滑动事件一起变化,通俗点讲是手指在屏幕上滑动到哪里,View就是跟着移动到哪里。总之,整体思路和上一章回中的内容保持一致。
实现方法
- 1.当View上的事件按下时记录下"按下事件"当前的坐标;
- 2.当View上的事件移动时记录下"移动事件"当前的坐标;
- 3.移动事件的坐标与按下事件坐标差就是View的偏移位置;
- 4.通过偏移位置计算出滑动后View的新坐标;
- 5.把新坐标传递给layout()方法来重新计算View的位置;
示例代码
public class ScrollEvent extends View
private Paint mPaint;
private float downX,downY;
//只列出一个构造方法,其它三种重载的构造方法与此构造方法类似,不再列出
public ScrollEvent(Context context)
super(context);
init(context);
@Override
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
canvas.drawRect(100,200,300,400,mPaint);
@Override
public boolean onTouchEvent(MotionEvent event)
super.onTouchEvent(event);
switch (event.getAction())
//记录按下事件的坐标
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_UP:
break;
//记录滑动事件的坐标,并且计算偏移值,然后是使用layout方法移动View
case MotionEvent.ACTION_MOVE:
float offsetX,offsetY,l,t,r,b;
offsetX = event.getX() - downX;
offsetY = event.getY() - downY;
//计算View滑动后的新坐标
l = getLeft()+offsetX;
t = getTop()+offsetY;
r = getRight()+offsetX;
b = getBottom()+offsetY;
//使用三种方法来移动view:layout重新布局,scrollBy(scrollTo)不可以,修改布局参数
layout((int)l ,(int) t,(int)r,(int)b);
break;
default:
break;
return true;
private void init(Context context)
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.FILL);
在上面的代码中添加有详细的注释,相信大家都可以看明白,这里的代码整体上与上一章回中的代码相同,不同之处在于移动View时使用layout()方法,该方法会重新计算view的坐标,然后对view进行重绘,重绘时View的坐标与之前的坐标不同,view就会发生移动。这便是该方法移动view的原理。
此外,代码使用了获取View坐标的方法,比如getLeft
().我们在很早之前的博客中介绍过,如果有看官忘记了,可以点击这里查看。
运行效果
我们在自定义的View中画了一个蓝色的矩形,当手指在屏幕上移动该矩形时,矩形就会随着手指移动,手动移动到哪里矩形就移动到哪里。我在这里就不演示具体的运行效果了,大家可以自己动手去实践。总之程序的运行效果和上一章回中的完全一样,大家可以理解为使用不同的方法实现了相同的效果。
看官们,关于"给View添加滑动事件"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第四百五十三回:给View添加滑动事件二)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百二十三回:给图片添加阴影)
一起Talk Android吧(第四百五十五回:给View添加手势事件一)
一起Talk Android吧(第四百五十六回:给View添加手势事件二)