一起Talk Android吧(第四百五十二回:给View添加滑动事件一)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百五十二回:给View添加滑动事件一)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们大家好,上一回中咱们说的例子是"View中的事件分发机制",这一回中说的例子是" 给View添加滑动事件"。闲话休提,言归正转,让我们一起Talk android吧!
整体思路
首先定义一个View的子类,在类中重写构造方法和事件响应方法onTouchEvent
().在该方法中依据事件的类型来响应事件,我们要添加的是滑动事件,因此只需要响应滑动类型(MOVE)的事件就可以.为了演示View的滑动效果,我们让View跟着滑动事件一起变化,通俗点讲是手指在屏幕上滑动到哪里,View就是跟着移动到哪里。
实现方法
- 1.当View上的事件按下时记录下"按下事件"当前的坐标;
- 2.当View上的事件移动时记录下"移动事件"当前的坐标;
- 3.移动事件的坐标与按下事件坐标差就是View的偏移位置;
- 4.把偏移位置传递给scrollBy方法来移动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;
//记录滑动事件的坐标,并且计算偏移值,然后是使用scrollBy方法移动View
case MotionEvent.ACTION_MOVE:
float offsetX,offsetY;
offsetX = event.getX() - downX;
offsetY = event.getY() - downY;
//scrollBy移动的是view的内容,因此需要先获取来当前view的父布局,注意值为负值,
((View)getParent()).scrollBy(-(int) offsetX,-(int) offsetY);
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);
在上面的代码中添加有详细的注释,相信大家都可以看明白,不过我还是要强调一下scrollBy
()方法的注意事项:
- 1.它是移动View的内容,而不是View本身,因此需要获取当前View的父View;
- 2.它是按照偏移位置进行移动的,而且移动的方向是相当于父View的,因此移动父View中的子View时需要对偏移值取反;
运行效果
我们在自定义的View中画了一个蓝色的矩形,当手指在屏幕上移动该矩形时,矩形就会随着手指移动,手动移动到哪里矩形就移动到哪里。我在这里就不演示具体的运行效果了,大家可以自己动手去实践。
看官们,关于"给View添加滑动事件"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第四百五十二回:给View添加滑动事件一)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百五十五回:给View添加手势事件一)
一起Talk Android吧(第四百五十六回:给View添加手势事件二)
一起Talk Android吧(第四百五十四回:计算View的滑动距离)