一起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添加滑动事件"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值