Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除
作者:静永萱 时间:2022-03-20 00:33:28
引言
CardView是Android 5.0系统之后引入的众多控件之一,实现之后的效果也是比较酷的,它经常被用在RecyclerView和ListView中的Item中。今天我们就来了解一下CardView的属性,然后使用CardView和RecyclerView结合实现一个可以拖拽Item的布局。
CardView的属性
CardView继承自FrameLayout,所以子控件的布局规则和FrameLayout的一样,是按照层次堆叠的
下面是CardView的一些常用属性:
CardView的基本使用
先看一下效果:
这是一个CardView,多个罗列起来看起啦会更酷,好了,我们先看一下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:paddingTop="10dp"
android:layout_width="match_parent" android:layout_height="wrap_content">
<android.support.v7.widget.CardView
android:layout_width="match_parent" android:layout_height="60dp"
android:layout_marginLeft="10dp" android:layout_marginRight="10dp"
app:contentPaddingLeft="20dp" app:cardBackgroundColor="@color/colorPrimary"
app:cardCornerRadius="5dp" app:cardElevation="5dp"
android:layout_marginBottom="10dp"
app:cardPreventCornerOverlap="true">
<LinearLayout
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:gravity="center_vertical">
<!--左侧图片-->
<ImageView
android:layout_width="50dp" android:layout_height="50dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:layout_marginLeft="10dp"
android:gravity="center_vertical">
<!--姓名-->
<TextView
android:id="@+id/txt_name" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textSize="16sp"
android:textColor="@android:color/white" android:text="王二"/>
<!--描述-->
<TextView
android:id="@+id/txt_describe" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_marginTop="5dp"
android:textSize="12sp" android:textColor="@android:color/darker_gray"
android:text="一个很厉害的人"/>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
看完了布局文件,是不是觉得这个布局不仅炫酷而且使用简单,下面我们把它应用到RecyclerView中,看起来会更炫酷。
CardView应用在RecyclerView中
CardView通常会应用在RecyclerView和ListView中,今天我们就讲一讲如何应用在RecyclerView中。我们现在在大多数应用或者手机系统界面中会见到这样的效果:
是不是觉得很棒,下面我们就用CardView和RecyclerView来实现一下这个效果。
布局文件
我们实现这个效果的第一步是先添加依赖库:
implementation 'com.android.support:recyclerview-v7:26.+'
implementation 'com.android.support:cardview-v7:26.+'
然后写一下布局文件,Item的布局文件我就直接采用上面的代码了,然后再写一个主界面的布局文件,比较简单,如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" android:paddingTop="10dp"
tools:context="com.jyx.demo.myapplication.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Activity内代码
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recyclerView);
//设置LayoutManager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
//绑定adapter
MyAdapter myAdapter = new MyAdapter(this);
mRecyclerView.setAdapter(myAdapter);
}
//adapter
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
LayoutInflater mInflater;
List<MData> mList = addData();
public MyAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item_my_recyclerview,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
holder.mName.setText(mList.get(position).getUserName());
holder.mDescribe.setText(mList.get(position).getDescription());
}
@Override
public int getItemCount() {
return mList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mName;
private TextView mDescribe;
public ViewHolder(View itemView) {
super(itemView);
mName = itemView.findViewById(R.id.txt_name);
mDescribe = itemView.findViewById(R.id.txt_describe);
}
}
}
//制造一个数据源
private class MData{
String userName;
String description;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
private List<MData> addData(){
List<MData> list = new ArrayList();
MData mData = new MData();
mData.setUserName("王二");
mData.setDescription("一个很厉害的人");
list.add(mData);
mData = new MData();
mData.setUserName("张三");
mData.setDescription("呵呵");
list.add(mData);
mData = new MData();
mData.setUserName("李四");
mData.setDescription("嘻嘻");
list.add(mData);
mData = new MData();
mData.setUserName("赵一");
mData.setDescription("呵呵");
list.add(mData);
mData = new MData();
mData.setUserName("钱多");
mData.setDescription("地主家的傻儿子");
list.add(mData);
return list;
}
}
来源:http://blog.qiji.tech/archives/16644
标签:Android,拖拽,左滑删除
0
投稿
猜你喜欢
Java如何使用httpclient检测url状态及链接是否能打开
2022-07-03 21:23:25
Java使用pulsar-flink-connector读取pulsar catalog元数据代码剖析
2023-11-05 17:25:41
Springboot2.x+ShardingSphere实现分库分表的示例代码
2023-11-26 01:34:07
在类库或winform项目中打开另一个winform项目窗体的方法
2023-08-14 06:47:31
Java多线程模拟银行系统存钱问题详解
2023-11-28 22:13:32
Java类的继承实例详解(动力节点Java学院整理)
2023-01-28 13:19:31
java集合求和最大值最小值示例分享
2022-10-11 04:15:10
利用Java Set 去除重复object的方法
2023-07-27 09:41:57
Android Studio使用小技巧:提取方法代码片段
2023-11-14 19:35:20
SpringCloud客户端报错:- was unable to send heartbeat!的解决
2021-08-13 14:08:11
逆转交替合并两个链表的解析与实现
2021-12-31 12:37:41
Spring Boot 文件上传与下载的示例代码
2021-08-30 02:04:53
Android实现WebView删除缓存的方法
2023-02-19 08:38:22
Spring异常捕获且回滚事务解决方案
2023-04-25 18:32:41
深入了解Java中finalize方法的作用和底层原理
2023-06-18 00:31:35
用java在web环境下上传和下载文件的技巧
2021-06-09 18:17:17
java读写二进制文件的解决方法
2022-08-03 14:45:55
如何将Object类转换为实体类
2021-11-05 04:45:11
C#读取csv格式文件的方法
2023-08-28 22:38:46
通过spring注解开发,简单测试单例和多例区别
2023-11-06 09:18:31