博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QQ侧滑删除分享(工具类)
阅读量:7239 次
发布时间:2019-06-29

本文共 3876 字,大约阅读时间需要 12 分钟。

hot3.png

 
package com.qudoulicai.www.qqlistview.QQlistview;import android.content.Context;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.LinearLayout;import android.widget.ListView;public class QQlistview extends ListView {    private int mScreenWidth;  // 屏幕宽度    private int mDownX;          // 按下点的x值    private int mDownY;          // 按下点的y值    private int mDeleteBtnWidth;// 删除按钮的宽度    private boolean isDeleteShown; // 删除按钮是否正在显示    private ViewGroup mPointChild; // 当前处理的item    private LinearLayout.LayoutParams mLayoutParams;   // 当前处理的item的LayoutParams    public QQlistview(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public QQlistview(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        // 获取屏幕宽度        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        DisplayMetrics dm = new DisplayMetrics();        wm.getDefaultDisplay().getMetrics(dm);        mScreenWidth = dm.widthPixels;    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                performActionDown(ev);                break;            case MotionEvent.ACTION_MOVE:                return performActionMove(ev);            case MotionEvent.ACTION_UP:                performActionUp();                break;        }        return super.onTouchEvent(ev);    }    // 处理action_down事件    private void performActionDown(MotionEvent ev) {        if(isDeleteShown) {            turnToNormal();        }        mDownX = (int) ev.getX();        mDownY = (int) ev.getY();        // 获取当前点的item        mPointChild = (ViewGroup) getChildAt(pointToPosition(mDownX, mDownY)                - getFirstVisiblePosition());        // 获取删除按钮的宽度        mDeleteBtnWidth = mPointChild.getChildAt(1).getLayoutParams().width;        mLayoutParams = (LinearLayout.LayoutParams) mPointChild.getChildAt(0)                .getLayoutParams();        // 为什么要重新设置layout_width 等于屏幕宽度        // 因为match_parent时,不管你怎么滑,都不会显示删除按钮        // why? 因为match_parent时,ViewGroup就不去布局剩下的view        mLayoutParams.width = mScreenWidth;        mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);    }    // 处理action_move事件    private boolean performActionMove(MotionEvent ev) {        int nowX = (int) ev.getX();        int nowY = (int) ev.getY();        if(Math.abs(nowX - mDownX) > Math.abs(nowY - mDownY)) {            // 如果向左滑动            if(nowX < mDownX) {                // 计算要偏移的距离                int scroll = (nowX - mDownX) / 2;                // 如果大于了删除按钮的宽度, 则最大为删除按钮的宽度                if(-scroll >= mDeleteBtnWidth) {                    scroll = -mDeleteBtnWidth;                }                // 重新设置leftMargin                mLayoutParams.leftMargin = scroll+10;                mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);            }            return true;        }        return super.onTouchEvent(ev);    }    // 处理action_up事件    private void performActionUp() {        // 偏移量大于button的一半,则显示button        // 否则恢复默认        if(-mLayoutParams.leftMargin >= mDeleteBtnWidth / 2) {            mLayoutParams.leftMargin = -mDeleteBtnWidth;            isDeleteShown = true;        }else {            turnToNormal();        }        mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);    }    /**     * 变为正常状态     */    public void turnToNormal() {        mLayoutParams.leftMargin = 0;        mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);        isDeleteShown = false;    }    /**     * 当前是否可点击     * @return 是否可点击     */    public boolean canClick() {        return !isDeleteShown;    }}//非原创原创地址太偏。。搬运过来

转载于:https://my.oschina.net/u/2355512/blog/534712

你可能感兴趣的文章
可以通过shadowserver来查看开放的mdns(用以反射放大攻击)——中国的在 https://mdns.shadowserver.org/workstation/index.html...
查看>>
IOS系统控件高度
查看>>
Flink - ResultPartition
查看>>
2017.10.09 穆瑞课KUKA机器人培训视频的感想
查看>>
Jsoup
查看>>
python中的中文编码问题
查看>>
安卓播放音频
查看>>
in linux system of ftp command
查看>>
Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
查看>>
***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法
查看>>
Mysql中Group By使用Having语句配合查询(where和having区别)
查看>>
C#连接数据库
查看>>
重定向和管道的区别
查看>>
分层、链式分析、url、联系的长度
查看>>
C++实现ping功能<转>
查看>>
使用matplotlib绘制收入增长模型——线性积累型与指数复利型
查看>>
【Spark】Spark-Redis连接池
查看>>
网络流简介
查看>>
How to fix “HTTP Status Code 505 – HTTP Version Not Supported” error?--转
查看>>
mybatis结合mysql批量操作及查询sql
查看>>