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

更多相关文章

  1. android流式布局热门标签的实现
  2. Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
  3. Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
  4. Android实现九宫格
  5. Android实现九宫格
  6. android布局基础及范例:人人android九宫格布局
  7. android获得屏幕高度和宽度
  8. XML-SHAPE
  9. Android(安卓)获取View高度宽度

随机推荐

  1. [cocos2dx] cocosdx编译工程那些事
  2. receiver定制自动启动一个程序
  3. Android(安卓)使用RadioGroup和RadioButt
  4. Android驱动入门-在Android系统上运行JAV
  5. android网络层实现实例
  6. Android(安卓)Adapter 异步图片请求诡异
  7. android 绘图、自定义组件
  8. Android存储(二):openFileInput和openFileOu
  9. 【译】Android(安卓)数据库 ORMLite
  10. android button 效果设计