Android 开源项目浅读-------SwipeMenuListView-重写,第三章,随手指移动的菜单

这一篇文章主要实现随手指移动的菜单。效果如图。


在上一篇基础上,我们将Button改为Layout,那么,我们就可以使得TextView和图片一起显示,甚至可以实现更复杂的显示。

那么我们实现SwipeMenuView 继承LineLayout, 代码如下。基本上就是在初始化代码中添加一个TextView和一个图标。就这些而已。

/**
 * Created by kankan on 2016/5/14.
 */
public class SwipeMenuView extends LinearLayout {
    public SwipeMenuView(Context context) {
        super(context);
        init(context);
    }

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

    void init(Context context){
        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        setOrientation(HORIZONTAL);
        setLayoutParams(layoutParams);
        TextView textView = new TextView(context);
        textView.setText("hello");
        textView.setTextColor(Color.RED);

        ImageView imageView = new ImageView(context);
        imageView.setImageResource(R.mipmap.ic_launcher);
        addView(textView);
        addView(imageView);

    }
}


在SwipeMenuLayout类里面生成一个SwipeMenuView对象替换Button对象。只改变了init函数,其它未变。编译就可以看到静态的图片文字列表了。

    void init(Context context){
        setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        SwipeMenuView swipeMenuView = new SwipeMenuView(context);
        this.addView(swipeMenuView);
    }


简单的菜单现在已经实现了,下一步实现菜单随着你的手指沿X轴运动。


在第一章里面已经实现了SwipeMenuListView类里面的手指移动响应,要想使得菜单跟着移动,要把这个响应引入到SwipeMenuLayout类里面。首先我们先看看SwipeMenuListView里面的onTouchEvent事件的函数,我们添加了SwipeMenuLayout对象的响应。

  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!");
                }
                View view =  getChildAt(0);
                if(view instanceof  SwipeMenuLayout){
                    mTouchView =(SwipeMenuLayout)view;
                    mTouchView.onSwipe(ev);
                }
                break;
        }
        return super.onTouchEvent(ev);
    }
}


接下来我们转入SwipeMenuLayout类里面的onSwipe函数了。该函数里面我们实现在X方向将移动坐标设置为菜单的起点坐标。代码也很简单,如下。

    public  void onSwipe(MotionEvent event){

        switch (event.getAction()){
            case MotionEvent.ACTION_MOVE:
                View view = getChildAt(0);
                view.layout((int) event.getX(),view.getTop() , view.getRight(), view.getBottom());
                Log.i(TAG,"the position of view is "+view.getTop()+"  ;the position of x is "+event.getX()
                +" ; the posistion of bottom is "+view.getBottom());

                //view.layout(0,(int)(event.getX()), view.getRight(), view.getBottom());
                break;
        }
    }


编译后,就可以说实现上面的效果了。

(本章完)点击打开链接

http://download.csdn.net/detail/nianhua120/9520049


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值