安卓RecyclerView的使用
- RecyclerView是一个ViewGroup;
- LayoutManager控制RecyclerView的ChildView的布局显示,childview由Recycler提供以及管理;
- 效果图:
MainActivity代码:
-
package com.fabian.recyclerviewtest; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManag
er; import android.view.animation.AlphaAnimation; import android.view.animation.AnimationSet; import android.view.animation.LayoutAnimationControlle r; import android.view.animation.ScaleAnimation; import java.util.ArrayList; public class MainActivity extends Activity { private RecyclerView my_recycler_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); my_recycler_view= (RecyclerView) findViewById(R.id.my_recycler_view); ArrayList entities=new ArrayList<>(); for(int i=0;i<<span style="color:#6897bb;">20;i++) { entities.add(newEntity("https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/super/whfpf=425,260,50/sign=c5464b263cf33a879e38535a a061240a/2f738bd4b31c8701b1f47af0 217f9e2f0708ff62.jpg", "亚裔小伙帮纽约流浪汉变帅哥 画面温馨")); entities.add(new Entity("https://ss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/super/whfpf=425,260,50/sign=0cdecc1a76cf3bc7e8559eac b73d8e93/caef76094b36acaf450aa6eb 7ad98d1001e99c3a.jpg", "英国蒸汽机集会 穿越时空回到蒸汽时代")); entities.add(new Entity("http://upload.cankaoxiaoxi.com/2015/0720/1437345130279.jpg", "世界冲浪冠军赛中选手遭鲨鱼袭击全程")); entities.add(new Entity("http://pic.miercn.com/uploads/allimg/150720/40-150H0091F1.jpg", "布隆迪小贩扒卡车回家 险象环生")); entities.add(newEntity("http://i2.chinanews.com/simg/hd/2015/07/20/200x133_4ac632f104504b52ae686d18 a51674bd.jpg", "长春一高校广场上晾晒金针菇 造型似八卦阵")); entities.add(newEntity("http://i2.chinanews.com/simg/hd/2015/07/20/200x133_a84bbf720bec4acfb2a708ba 481a3feb.jpg", "晒金针菇")); entities.add(newEntity("http://i2.chinanews.com/simg/hd/2015/07/20/200x133_865e3c7ea863461aabdd80e8 c0e65de1.jpg", "广场上晒金针菇")); } RVAdapter rvAdapter=new RVAdapter(entities,this); LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); // GridLayoutManager mLayoutManager=new GridLayoutManager(this,3); //StaggeredGridLayoutManag er mLayoutManager=new StaggeredGridLayoutManag er(2,1); my_recycler_view.setLayoutManager(mLayoutManager); my_recycler_view.setAdapter(rvAdapter); AnimationSet aset=new AnimationSet(false); ScaleAnimation sa=new ScaleAnimation(0f,1f,0f,1f,0.5f,0.5f); sa.setDuration(1500); AlphaAnimation aa=new AlphaAnimation(0f,1f); aa.setDuration(1500); aset.addAnimation(sa); aset.addAnimation(aa); LayoutAnimationControlle r controller = new LayoutAnimationControlle r(aset, 0.5f); controller.setOrder(LayoutAnimationControlle r.ORDER_NORMAL); my_recycler_view.setLayoutAnimation(controller); } } -
Adapter代码:
-
package com.fabian.recyclerviewtest; import android.content.Context; import android.graphics.Bitmap; import android.support.v7.widget.RecyclerView; import android.util.LruCache; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; import java.util.ArrayList; public class RVAdapter extends RecyclerView.Adapter{ private ArrayList entities; private Context context; private LayoutInflater inflater; private RequestQueue mRequestQueue; private final ImageLoader mImageLoader; public RVAdapter(ArrayList entities, Context context) { this.entities = entities; this.context = context; inflater=LayoutInflater.from(context); mRequestQueue= Volley.newRequestQueue(context); mImageLoader=new ImageLoader(mRequestQueue,new MyCache()); } @Override public MyHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view=inflater.inflate(R.layout.item_layout,viewGroup,false); MyHolder myHolder=new MyHolder(view); return myHolder; } @Override public void onBindViewHolder(MyHolder viewHolder, int i) { viewHolder.tv.setText(entities.get(i).getContent()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(viewHolder.iv,android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete); mImageLoader.get(entities.get(i).getUrl(), listener); mRequestQueue.start(); } @Override public int getItemCount() { return entities.size(); } } class MyHolder extends RecyclerView.ViewHolder { TextView tv; ImageView iv; public MyHolder(View itemView) { super(itemView); tv= (TextView) itemView.findViewById(R.id.textView); iv= (ImageView) itemView.findViewById(R.id.imageView); } } class MyCache implements ImageLoader.ImageCache { private LruCache,Bitmap> cache; public MyCache() { cache=new LruCache, Bitmap>(8*1024*1024) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String s) { return cache.get(s); } @Override public void putBitmap(String s, Bitmap bitmap) { cache.put(s,bitmap); } }
-
Entity代码:
-
package com.fabian.recyclerviewtest; public class Entity { private String url; private String content; public Entity(String url, String content) { this.url = url; this.content = content; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }