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相同的效果。
运行如图:

Android通过PagerSnapHelper改造RecyclerView成“ViewPager”_第1张图片

Android通过PagerSnapHelper改造RecyclerView成“ViewPager”_第2张图片

更多相关文章

  1. 图片中的毕加索【Picasso】
  2. Android实现ListView异步加载图片
  3. Android ImageView实现上一页,下一页图片切换
  4. 安卓第三天---ViewPager控件实现滑动切换图片
  5. Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能

随机推荐

  1. Android(安卓)自定义Progress Bar
  2. Android--利用selector设置Button
  3. Android(安卓)Studio .gitignore
  4. cocos2d-x-2.1.4在NDK r9下的编译问题
  5. Android状态栏提醒(Notification,Notific
  6. 我的Android进阶之旅------>Android视频
  7. 史上最全!最经典!最无私的Android资料(书籍+
  8. Android(安卓)Studio 第五十期 - 自定义T
  9. Android的ProgressBar以及自定义进度条
  10. android_ui对其方式