我想用viewpager2来实现横向滑动卡片的效果,但是遇到问题
我需要的效果是这样横向滑动但是每个卡片不需要match_parent来占据整个width的。然而我遇到的问题是,当我设置item对应的layout的时候,它被要求width和height要设置成match_parent才能不报错。然后我换思路,调节父容器的height,但是展示出来的不是想要的效果,如下图
那么如何才能做到图一的效果呢?
ViewPagerActivity
package com.example.viewpager; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class ViewPagerActivity extends AppCompatActivity { List<Msg> datas = new ArrayList<>(); ViewPager2 mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager); datas.addAll(MsgLab.generateMockList()); RecyclerView.Adapter mAdapter = new RecyclerView.Adapter() { @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(ViewPagerActivity.this).inflate(R.layout.viewpager_item_msg, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ViewHolder viewHolder = (ViewHolder) holder; viewHolder.mIvImg.setImageResource(datas.get(position).getIntResId()); viewHolder.mTvTitle.setText(datas.get(position).getTitle()); } @Override public int getItemCount() { return datas.size(); } }; mViewPager = findViewById(R.id.id_vp2_msgPager); mViewPager.setAdapter(mAdapter); } private class ViewHolder extends RecyclerView.ViewHolder{ private ImageView mIvImg; private TextView mTvTitle; public ViewHolder(@NonNull View itemView) { super(itemView); mIvImg = itemView.findViewById(R.id.id_iv_img); mTvTitle = itemView.findViewById(R.id.id_tv_title); } } }
activity_view_pager.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".ViewPagerActivity"> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/id_vp2_msgPager" android:layout_width="200dp" android:layout_height="250dp" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
viewpager_item_msg.xml
<?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:background="#ffffffff" android:orientation="vertical"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="205dp" android:layout_marginHorizontal="8dp" android:layout_marginVertical="8dp" app:cardCornerRadius="8dp"> <ImageView android:id="@+id/id_iv_img" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" tools:src="@drawable/img01" /> </androidx.cardview.widget.CardView> <TextView android:id="@+id/id_tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="10dp" android:textColor="#000000" android:textSize="15dp" android:maxLines="2" android:textStyle="bold" tools:text="在xx网学习Android技术" /> </LinearLayout>
15
收起
正在回答 回答被采纳积分+1
2回答
2.Android 网络操作与流行框架
- 参与学习 人
- 提交作业 220 份
- 解答问题 1800 个
本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星