Android通过PagerSnapHelper改造RecyclerView成“ViewPager”
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<MyAdapter.ViewHolder> {
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相同的效果。
运行如图: