软件编程
位置:首页>> 软件编程>> Android编程>> Android嵌套RecyclerView左右滑动替代自定义view

Android嵌套RecyclerView左右滑动替代自定义view

作者:世人笑我太疯癫  发布时间:2023-03-27 14:51:17 

标签:android,recycleview,滑动

以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一个左右滑动效果

而列表里面也容易,只是需要解决一点小问题,个人认为值得一提的就是高度问题,一般的人采用固定死的高度,可是在列表里面展示和机型的不同,固定死的话很难保证美观,动态的高度才能解决问题的所在

首先在一个列表控件布局上添加一个recyclerview控件


<android.support.v7.widget.RecyclerView
 android:id="@+id/plan_recycler"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"/>

然后是adapter适配器布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="@dimen/dimen_20dp">
<ImageView android:id="@+id/img_icon"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:src="@drawable/bbs_plan_mofa"/>
<TextView android:id="@+id/tv_content"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:layout_marginTop="@dimen/dimen_8dp"
 android:textSize="15sp"
 android:textColor="@color/color_323232"/>
</LinearLayout>

接下来写adapter


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.xulu.loanmanager.R;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by LiuZhen on 2017/6/22.
*/
public class BBSPlanAdapter extends RecyclerView.Adapter<BBSPlanAdapter.MyViewHolder> {
private List<String> list;
private LayoutInflater mInflater;
private Context context=null;
private int height;
private boolean isMeasure = false;
private CallBack callBack;
public BBSPlanAdapter(Context context, List<String> list, CallBack callBack) {
 this.context=context;
 this.list = list;
 mInflater = LayoutInflater.from(context);
 this.callBack = callBack;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 View view = mInflater.inflate(R.layout.item_bbsdetail_plan, parent, false);
 if (!isMeasure) {
  view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
  height = view.getMeasuredHeight();
  callBack.getHeight(height);
 }
 MyViewHolder holder = new MyViewHolder(view);
 return holder;
}
public int getHeight(){
 return height;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
 holder.itemView.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
   callBack.ItemClick(position);
  }
 });
}
@Override
public int getItemCount() {
 return 6;
}
static class MyViewHolder extends RecyclerView.ViewHolder{
 @BindView(R.id.tv_content)
 TextView tv_content;
 MyViewHolder(View view){
  super(view);
  ButterKnife.bind(this,view);
 }
}
public interface CallBack{
 void getHeight(int height);
 void ItemClick(int position);
}
}

重点是measure方法,得到测量的高度

接下来就可以直接使用了


private void initScrollList(){
 final RecyclerView planRecycler = (RecyclerView) headView.findViewById(R.id.plan_recycler);
 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(BBSDetailActivity.this);
 linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
 planRecycler.setLayoutManager(linearLayoutManager);
 List<String> list = new ArrayList<>();
 BBSPlanAdapter adapter = new BBSPlanAdapter(BBSDetailActivity.this, list, new BBSPlanAdapter.CallBack() {
  @Override
  public void getHeight(int height) {
   ViewGroup.LayoutParams params = planRecycler.getLayoutParams();
   params.height = height;
   planRecycler.setLayoutParams(params);
  }
  @Override
  public void ItemClick(int position) {
   Toast.makeText(BBSDetailActivity.this,""+position,Toast.LENGTH_SHORT).show();
  }
 });
 planRecycler.setAdapter(adapter);
}

很简单,完全替代自定义view,效果如下,如果没有测量这一步可能会出现高度不适合,要么是看不到textview的文字,因为太低了,要么就是太高了,不美观。

Android嵌套RecyclerView左右滑动替代自定义view

以上所述是小编给大家介绍的Android嵌套RecyclerView左右滑动替代自定义view网站的支持!

来源:http://www.cnblogs.com/LiuZhen/archive/2017/06/22/7065874.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com