类似QQ的横向滑动删除

AndroidSwipeLayout可以简单实现类似的功能

我设置成是左边滑动,通过设置属性drag_edge来控制滑动方向,还有可以通过show_mode来设置滑动方式,我用的是lay_down还有pull_out

左边用的是RecyclerView右边用的是ListView,可以看出对RecyclerView的动画支持不是很好,有时候打开一个新的其他的都会关闭,而ListView只要打开新的,已经打开的就会关闭

布局没啥好说的就是用Adapter不同,要继承AndroidSwipeLayout自带的Adapter

RecyclerListAdapter.java

//和原来的使用没什么区别
class RecyclerListAdapter extends RecyclerSwipeAdapter<RecyclerListAdapter.SwipeViewHolder> {
    private LayoutInflater layoutInflater;
    public RecyclerListAdapter(Context context){
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public SwipeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = layoutInflater.inflate(R.layout.item_swipe_view,parent,false);
        final SwipeViewHolder viewHolder = new SwipeViewHolder(view);
        viewHolder.textView = view.findViewById(R.id.number_text_view);
        viewHolder.button1 = view.findViewById(R.id.button_1);
        viewHolder.button2 = view.findViewById(R.id.button_2);

        viewHolder.button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Toast.makeText(view.getContext(),viewHolder.textView.getText()+":"+viewHolder.button1.getText(),Toast.LENGTH_SHORT).show();
            }
        });
        viewHolder.button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),viewHolder.textView.getText()+":"+viewHolder.button2.getText(),Toast.LENGTH_SHORT).show();
            }
        });
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(SwipeViewHolder viewHolder, int position) {
        viewHolder.textView.setText(""+position);
    }

    @Override
    public int getItemCount() {
        return 20;
    }

    @Override
    public int getSwipeLayoutResourceId(int position) {
        return R.id.swipe_layout;
    }

    public class SwipeViewHolder extends RecyclerView.ViewHolder{
        public SwipeViewHolder(View view){
            super(view);
        }
        TextView textView;
        Button button1;
        Button button2;
    }

}

ListAdapter.java

class ListAdapter extends BaseSwipeAdapter {
    private LayoutInflater layoutInflater;

    private ListAdapter(Context context){
        layoutInflater = LayoutInflater.from(context);
    }

    //SwipeLayout的布局id
    @Override
    public int getSwipeLayoutResourceId(int position) {
        return R.id.swipe_layout;
    }
    //初始化view
    @Override
    public View generateView(int position, ViewGroup parent) {
        View view = layoutInflater.inflate(R.layout.item_swipe_view,parent,false);

        final ViewHolder holder = new ViewHolder();

        view.setTag(holder);

        holder.textView = view.findViewById(R.id.number_text_view);
        holder.button1 = view.findViewById(R.id.button_1);
        holder.button2 = view.findViewById(R.id.button_2);

        holder.button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Toast.makeText(view.getContext(),holder.textView.getText()+":"+holder.button1.getText(),Toast.LENGTH_SHORT).show();
            }
        });
        holder.button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),holder.textView.getText()+":"+holder.button2.getText(),Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }
    //数据操作
    @Override
    public void fillValues(int position, View convertView) {
        ViewHolder holder = (ViewHolder) convertView.getTag();
        holder.textView.setText(""+position);
    }

    @Override
    public int getCount() {
        return 20;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    private class ViewHolder{
        TextView textView;
        Button button1;
        Button button2;
    }

}

这个作者应该是参考了RecyclerView将初始化和处理分开了

getSwipeLayoutResourceId()函数要布局中SwipeLayout的id

item_swipe_view.xml

<?xml version="1.0" encoding="utf-8"?>
<com.daimajia.swipe.SwipeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/swipe_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:show_mode="pull_out"
    app:drag_edge="left">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1"
            />
        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
        android:background="#753483">
        <TextView
            android:id="@+id/number_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</com.daimajia.swipe.SwipeLayout>

布局里下边的LinearLayout是要展示的内容,上边的是要滑动显示的内容,也许还可以套三层或四层,没试过,感觉也用不到

SwipeLayout也可以单独拿出来当布局

activity_main.mxl

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.swipe.MainActivity">
    <com.daimajia.swipe.SwipeLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/swipe_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:show_mode="pull_out"
        app:drag_edge="right">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            >
            <Button
                android:id="@+id/button_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1"
                />
            <Button
                android:id="@+id/button_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="#753483">
            <TextView
                android:id="@+id/number_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="SwipeLayout"/>
        </LinearLayout>
    </com.daimajia.swipe.SwipeLayout>


</android.support.constraint.ConstraintLayout>







猜你喜欢

转载自blog.csdn.net/u010302327/article/details/79137082