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>