Android 开源项目浅读-------SwipeMenuListView-重写-第一章-手指移动事件捕获

上一篇文章说了该控件继承ListView项目,数据基本不用管理了。那么我们就需要实现滑动弹出菜单内这个功能。而这个功能就需要坚持手指移动的事件。

要实现这个功能其实,很简单就是Override OnTouchEvent。 通过下面的代码我们就可以实现手指移动事件的监测了。

package io.github.nianhua110.myswipemenulistview;

import android.content.Context;
import android.graphics.Point;
import android.support.design.widget.TabLayout;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * Created by kankan on 2016/5/10.
 */
public class MySwipeMenuListView extends ListView {
    String TAG = this.getClass().getSimpleName();
    private int MAX_Y = 5;
    private int MAX_X = 3;
    private float mDownX ;
    private float mDownY;
    public MySwipeMenuListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

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

    public MySwipeMenuListView(Context context) {
        super(context);
        init();
    }

    @Override
    public void setAdapter(ListAdapter adapter) {
        super.setAdapter(adapter);
    }

    void init(){
        MAX_X = dp2dx(MAX_X);
        MAX_Y = dp2dx(MAX_Y);
        Log.i(TAG, "max_x is"+MAX_X + "  max_y is "+MAX_Y);
    }
    private int dp2dx(int dp){
        DisplayMetrics displayMetrics =   getContext().getResources().getDisplayMetrics();
        int tempHeight = displayMetrics.heightPixels;
        int tempWidth = displayMetrics.widthPixels;
        float temp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
        Log.i(TAG, "height pixels is " + tempHeight + "  width pixels is " + tempWidth);

        return  (int)temp;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
      //  return true;
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                mDownX = ev.getX();
                mDownY = ev.getY();
                Log.i(TAG, "down x is "+mDownX + "  down y is "+ mDownY);
            case MotionEvent.ACTION_MOVE:
                float dx=Math.abs(mDownX- ev.getX());
                float dy = Math.abs(mDownY - ev.getY());
                Log.i(TAG, "on touch move x "+ev.getX() +" y "+ev.getY());
                Log.i(TAG, "dx "+dx+" dy "+dy);

                if(dx > MAX_X){
                    Log.i(TAG, "enough offset!");
                }
                break;
        }
        return super.onTouchEvent(ev);
    }
}

滑动手指后该干嘛呢,那就是显示菜单了。怎么显示才菜单呢,我们查看一下作者的思路,作者的ACTON_MOVE 下面有个

mTouchView.onSwipe(ev);
函数,mTouchView的类是
SwipeMenuLayout  该类 FragmentLayout的子类,FrameLayout就是显示的类,那么我们接下来分析一个这个类吧。

下一篇文章在分析吧。这一篇的源码点击下载

点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值