Android 5.0 Design RecycleView
2015-04-24 09:17
183 查看
RecycleView 是5.0特有的,ListView的强化版,Item项可具有阴影效果,通过滑动控制bar的弹出和隐藏
下面是效果图:
主要类:
测试代码:
资源下载地址:http://download.csdn.net/detail/anddroid_lanyan/8627651
下面是效果图:
主要类:
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.LayoutParams; import android.view.View; /** * * 绘制 item 分割线 * @author LanYan * */ public class RecycleViewItem extends RecyclerView.ItemDecoration{ private int[] attr={android.R.attr.listDivider}; private Drawable mDrawable;; /** * 构造函数,获取分割线图片 * @param context */ public RecycleViewItem(Context context){ TypedArray mTypeArray=context.obtainStyledAttributes(attr); mDrawable=mTypeArray.getDrawable(0); mTypeArray.recycle(); } /** * 绘制所有的列表项的分割线 */ @Override public void onDrawOver(Canvas c, RecyclerView parent) { // TODO Auto-generated method stub int left=parent.getLeft(); int right=parent.getWidth()-parent.getPaddingRight(); int count=parent.getChildCount(); for (int i = 0; i < count; i++) { View view=parent.getChildAt(i); LayoutParams params=(LayoutParams) view.getLayoutParams(); int top=view.getBottom()+params.bottomMargin; int bottom=top+mDrawable.getIntrinsicHeight(); mDrawable.setBounds(left, top, right, bottom); mDrawable.draw(c); } } }
import java.util.List; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import design.lanyan.one.R; public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolder>{ private LayoutInflater inflater; private List<Student> list; public RecycleAdapter(Context context,List<Student> list){ this.inflater=LayoutInflater.from(context); this.list=list; } @Override public int getItemCount() { // TODO Auto-generated method stub return list.size(); } public void onBindViewHolder(ViewHolder mholder, int position) { // TODO Auto-generated method stub Student st=list.get(position); mholder.name.setText(st.getName()); mholder.name.setTag(st); } @Override public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { // TODO Auto-generated method stub View view=inflater.inflate(R.layout.list_basic_item,arg0,false); ViewHolder holder=new ViewHolder(view); return holder; } public void removeItem(int position) { list.remove(position); notifyItemRemoved(position); } public void addItem(List<Student> mlist) { for (int i = 0; i < mlist.size(); i++) { list.add(mlist.get(i)); // 通知RecyclerView控件插入了某个Item notifyItemInserted(list.size()); } } public void addItem(Student student) { list.add(student); notifyItemInserted(list.size()); } public static class ViewHolder extends RecyclerView.ViewHolder{ private final TextView name; public ViewHolder(View v) { super(v); // TODO Auto-generated constructor stub name=(TextView)v.findViewById(R.id.textViewSample); } } }
测试代码:
public class MainActivity extends Activity { @ViewInject(R.id.deleteBar) private FrameLayout mdeleteBar; private RecycleAdapter mRecyclerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewUtils.inject(this); initView(); } @SuppressLint("NewApi") private void initView() { // TODO Auto-generated method stub mdeleteBar = (FrameLayout) findViewById(R.id.deleteBar); final RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view); final LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); final RecyclerView.ItemDecoration itemDecoration = new RecycleViewItem(this); recyclerView.addItemDecoration(itemDecoration); mRecyclerAdapter=new RecycleAdapter(this,Student.getData(1)); recyclerView.setAdapter(mRecyclerAdapter); recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // dx:大于0,向右滚动 小于0,向左滚动 // dy:大于0,向上滚动 小于0,向下滚动 if(dy > 10) { // 列表向上滚动,隐藏删除面板 if(mdeleteBar.getVisibility() == View.VISIBLE) { hideDeleteBar(); } } else if(dy<-10){ // 列表向下滚动,显示删除面板 if(mdeleteBar.getVisibility() == View.GONE) { showDeleteBar(); } } } }); hideDeleteBar(); } private void showDeleteBar() { mdeleteBar.startAnimation(AnimationUtils.loadAnimation(this, R.anim.translate_up_on)); mdeleteBar.setVisibility(View.VISIBLE); } private void hideDeleteBar() { mdeleteBar.startAnimation(AnimationUtils.loadAnimation(this, R.anim.translate_up_off)); mdeleteBar.setVisibility(View.GONE); } }
资源下载地址:http://download.csdn.net/detail/anddroid_lanyan/8627651
相关文章推荐
- Android 5.0+(RecycleView、CardView、Palette)
- Android程序开发——5.0新特性 RecycleView替换ListView
- Android 5.0新特性RecycleView的基本使用
- Android 5.0+(RecycleView、CardView、Palette)
- Android中RecycleView的使用详解
- Android RecycleView分割线详解、完美解决Recyclerview没有分割线的问题
- Android Listview 中出现 at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:7272) 错误
- android之RecycleView之ItemTouchHelper 处理拖拽、滑动删除
- Android入门教程四十七之RecycleView的使用总结
- Android 使用RecycleView打造自定义日历
- Android Study Material Design 七 之 谈谈ToolBar以及SearchView
- android recycleview使用
- android RecycleView Adapter简单封装
- android开发游记:RecycleView 实现复杂首页布局三种方式
- android RecycleView 嵌套问题切换页面跳动问题、嵌套展开显示不全问题处理方法
- Android Study Material Design 二 之:这可能是RecyclerView最全解析 中级进阶(二)
- ym—— Android 5.0学习之ListView升级版RecyclerView
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)
- Android 5.0 Material Design的实现点击任意View的水波效果
- android Material Design之 ToolBar+TabLayout+recycleView的效果实现