RecyclerView 介绍 官方文档:RecyclerView RecycleView 是google的v7 包中用来替代ListView,其中直接拥有缓存模块ViewHolder。里面包含的LayoutManager 可以很方便的实现ListView,GridView,下拉刷新。ItemAnimation也很好的实现了每个Item的特效。
RecyclerView 使用 1 2 3 4 5 6 7 8 9 10 <android.support.v7.widget.RecyclerView android:id ="@+id/list" android:clipToPadding ="false" android:layout_width ="match_parent" android:layout_height ="match_parent" android:paddingRight ="@dimen/activity_horizontal_margin" android:paddingLeft ="@dimen/activity_horizontal_margin" android:paddingTop ="@dimen/activity_horizontal_margin" android:paddingBottom ="@dimen/activity_vertical_margin" />
Activity 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class MainActivity extends AppCompatActivity { @InjectView (R.id.list) RecyclerView mRecyclerView; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this ); mRecyclerView = (RecyclerView) findViewById(R.id.list); mRecyclerView.setLayoutManager(new LinearLayoutManager(this )); mRecyclerView.setItemAnimator(new CustomItemAnimator()); mAdapter = new ApplicationAdapter(new ArrayList<AppInfo>(), R.layout.row_application, MainActivity.this ); mRecyclerView.setAdapter(mAdapter); } }
上面的代码还需要两个class,一个是CustomItemAnimator,用来做现实item特效;另一个是Adapter;下面分别实现
Adapter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 public class ApplicationAdapter extends RecyclerView .Adapter <ApplicationAdapter .ViewHolder > { private List<AppInfo> applications; private int rowLayout; public ApplicationAdapter (List<AppInfo> applications, int rowLayout) { this .applications = applications; this .rowLayout = rowLayout; } @Override public ViewHolder onCreateViewHolder (final ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(rowLayout, viewGroup, false ); return new ViewHolder(v); } @Override public void onBindViewHolder (final ViewHolder viewHolder, int i) { final AppInfo appInfo = applications.get(i); viewHolder.name.setText(appInfo.getName()); viewHolder.image.setImageDrawable(appInfo.getIcon()); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick (View v) { } }); } @Override public int getItemCount () { return applications == null ? 0 : applications.size(); } public static class ViewHolder extends RecyclerView .ViewHolder { public TextView name; public ImageView image; public ViewHolder (View itemView) { super (itemView); name = (TextView) itemView.findViewById(R.id.countryName); image = (ImageView) itemView.findViewById(R.id.countryImage); } } }
ItemAnimator 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 public class ReboundItemAnimator extends RecyclerView .ItemAnimator { private List<RecyclerView.ViewHolder> mViewHolders = new ArrayList<RecyclerView.ViewHolder>(); @Override public void runPendingAnimations () { if (!mViewHolders.isEmpty()) { for (final RecyclerView.ViewHolder viewHolder : mViewHolders) { } } } @Override public boolean animateRemove (RecyclerView.ViewHolder viewHolder) { viewHolder.itemView.animate().alpha(0 ).scaleX(0 ).scaleY(0 ).setDuration(300 ).start(); return false ; } @Override public boolean animateAdd (RecyclerView.ViewHolder viewHolder) { viewHolder.itemView.setScaleX(0 ); viewHolder.itemView.setScaleY(0 ); return mViewHolders.add(viewHolder); } @Override public boolean animateMove (RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) { return false ; } @Override public boolean animateChange (RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2, int i, int i2, int i3, int i4) { return false ; } @Override public void endAnimation (RecyclerView.ViewHolder viewHolder) { } @Override public void endAnimations () { } @Override public boolean isRunning () { return !mViewHolders.isEmpty(); } }
运行效果
Posted by scalaview - 2015-05-25
如需转载,请注明: 本文来自 王见充时光