国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

ListView左劃刪除

2019-11-09 18:44:29
字體:
供稿:網(wǎng)友

參考網(wǎng)上大神的例子,自己照著大意寫了一遍(留著參考,方便日后使用)

1、新建MyListView 繼承自ListView 重寫方法

代碼如下:

package com.deletetest;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;/** * Created by Administrator on 2016/12/9. */public class MyListView extends ListView {    PRivate int mScreenWidth; // 屏幕寬度    private int mDownX; // 按下點(diǎn)的x值    private int mDownY; // 按下點(diǎn)的y值    private int mDeleteBtnWidth;// 刪除按鈕的寬度    private boolean isDeleteShown; // 刪除按鈕是否正在顯示    private ViewGroup mPointChild; // 當(dāng)前處理的item    private LinearLayout.LayoutParams mLayoutParams;// 當(dāng)前處理的item的LayoutParams    public MyListView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MyListView(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();        // 獲取當(dāng)前點(diǎn)的item        mPointChild = (ViewGroup) getChildAt(pointToPosition(mDownX, mDownY)                - getFirstVisiblePosition());        // 獲取刪除按鈕的寬度        mDeleteBtnWidth = mPointChild.getChildAt(1).getLayoutParams().width;        mLayoutParams = (LinearLayout.LayoutParams) mPointChild.getChildAt(0)                .getLayoutParams();        // 為什么要重新設(shè)置layout_width 等于屏幕寬度        // 因?yàn)閙atch_parent時(shí),不管你怎么滑,都不會(huì)顯示刪除按鈕        // why? 因?yàn)閙atch_parent時(shí),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)) {            // 如果向左滑動(dòng)            if(nowX < mDownX) {                // 計(jì)算要偏移的距離                int scroll = (nowX - mDownX) / 3;                // 如果大于了刪除按鈕的寬度, 則最大為刪除按鈕的寬度                if(-scroll >= mDeleteBtnWidth) {                    scroll = -mDeleteBtnWidth;                }                // 重新設(shè)置leftMargin                mLayoutParams.leftMargin = scroll;                mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);            }            return true;        }        return super.onTouchEvent(ev);    }    // 處理action_up事件    private void performActionUp() {        // 偏移量大于button的一半,則顯示button        // 否則恢復(fù)默認(rèn)        if(-mLayoutParams.leftMargin >= mDeleteBtnWidth / 3) {            mLayoutParams.leftMargin = -mDeleteBtnWidth;            isDeleteShown = true;        }else {            turnToNormal();        }        mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);    }    /**     * 變?yōu)檎顟B(tài)     */    public void turnToNormal() {        mLayoutParams.leftMargin = 0;        mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);        isDeleteShown = false;    }    /**     * 當(dāng)前是否可點(diǎn)擊     * @return 是否可點(diǎn)擊     */    public boolean canClick() {        return !isDeleteShown;    }}

2、activity側(cè)代碼:

package com.deletetest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    private MyListView mListView;    private ArrayList<String> mData = new ArrayList<String>() {        {            for(int i=0;i<50;i++) {                add("十言" + i);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListView = (MyListView) findViewById(R.id.list);        mListView.setAdapter(new MyAdapter());        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                                    int position, long id) {                if(mListView.canClick()) {                    Toast.makeText(MainActivity.this, mData.get(position), Toast.LENGTH_SHORT).show();                }            }        });    }    class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return mData.size();        }        @Override        public Object getItem(int position) {            return mData.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            if(null == convertView) {                convertView = View.inflate(MainActivity.this, R.layout.item, null);            }            TextView tv = (TextView) convertView.findViewById(R.id.tv);            TextView delete = (TextView) convertView.findViewById(R.id.delete);            tv.setText(mData.get(position));            final int pos = position;            delete.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    mData.remove(pos);                    notifyDataSetChanged();                    mListView.turnToNormal();                    Toast.makeText(MainActivity.this,"已刪除",Toast.LENGTH_SHORT).show();                }            });            return convertView;        }    }}

3、activity側(cè)布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.deletetest.MainActivity">    <com.loupai.deletetest.MyListView        android:id="@+id/list"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:cacheColorHint="@android:color/transparent"        android:listSelector="@android:color/transparent"        android:divider="@android:color/darker_gray"        android:dividerHeight="2dp"        android:scrollbars="none"/></RelativeLayout>

4、item布局如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingBottom="20dp"        android:paddingLeft="10dp"        android:paddingTop="20dp"        android:background="@android:color/white"/>    <TextView        android:id="@+id/delete"        android:layout_width="100dp"        android:layout_height="match_parent"        android:background="#FFFF0000"        android:gravity="center"        android:textColor="@android:color/white"        android:paddingRight="20dp"        android:text="刪除" /></LinearLayout>


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文安县| 乌拉特前旗| 吉水县| 香河县| 福贡县| 普陀区| 都兰县| 东乌珠穆沁旗| 彭水| 建湖县| 会同县| 咸丰县| 石首市| 攀枝花市| 乌海市| 榆中县| 梓潼县| 夏津县| 龙胜| 江安县| 安西县| 青岛市| 黄平县| 喀什市| 颍上县| 英山县| 拉孜县| 上虞市| 惠安县| 宁化县| 延寿县| 二连浩特市| 淮阳县| 崇仁县| 育儿| 鹿邑县| 广德县| 剑川县| 林周县| 康马县| 武城县|