Android通过PagerSnapHelper改造RecyclerView成“ViewPager”
16lz
2021-01-23
Android通过PagerSnapHelper改造RecyclerView成“ViewPager”
最新Android平台针对RecyclerView引入一个辅助类PagerSnapHelper,PagerSnapHelper可以把一个普通的RecyclerView改造成ViewPager,每一个RecyclerView的子item在翻动时候,像ViewPager一样。
如代码:
package zhangphil.test;import android.content.Context;import android.content.res.Resources;import android.graphics.Color;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.PagerSnapHelper;import android.support.v7.widget.RecyclerView;import android.util.DisplayMetrics;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;public class RVActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView mRecyclerView = findViewById(R.id.recycler_view); LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); mLayoutManager.setOrientation(LinearLayout.HORIZONTAL); mRecyclerView.setLayoutManager(mLayoutManager); PagerSnapHelper mPagerSnapHelper = new PagerSnapHelper(); mPagerSnapHelper.attachToRecyclerView(mRecyclerView); RecyclerView.Adapter mAdapter = new MyAdapter(); mRecyclerView.setAdapter(mAdapter); } private class MyAdapter extends RecyclerView.Adapter { public MyAdapter() { super(); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(getApplicationContext()).inflate(android.R.layout.simple_list_item_2, null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { viewHolder.text1.setText(String.valueOf(i)); viewHolder.text2.setText("pos:" + i); int n = i % 2; int color = n == 0 ? Color.DKGRAY : Color.LTGRAY; viewHolder.itemView.setBackgroundColor(color); } @Override public int getItemCount() { return 20; } public class ViewHolder extends RecyclerView.ViewHolder { public TextView text1; public TextView text2; public ViewHolder(View itemView) { super(itemView); float[] size = getDeviceDisplaySize(getApplicationContext()); itemView.setMinimumWidth((int) size[0]); text1 = itemView.findViewById(android.R.id.text1); text1.setTextColor(Color.RED); text1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 160); text2 = itemView.findViewById(android.R.id.text2); text2.setTextColor(Color.BLUE); } } } public static float[] getDeviceDisplaySize(Context context) { Resources resources = context.getResources(); DisplayMetrics dm = resources.getDisplayMetrics(); int width = dm.widthPixels; int height = dm.heightPixels; float[] size = new float[2]; size[0] = width; size[1] = height; return size; }}
本例特意把RecyclerView设置成水平方向,并且把每一个子元素的宽度设置成和手机设备屏幕宽度一样的值,以达到和ViewPager相同的效果。
运行如图:
更多相关文章
- 图片中的毕加索【Picasso】
- Android实现ListView异步加载图片
- Android ImageView实现上一页,下一页图片切换
- 安卓第三天---ViewPager控件实现滑动切换图片
- Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能