Android 5.0 Design RecycleView

RecycleView 是5.0特有的,ListView的强化版,Item项可具有阴影效果,通过滑动控制bar的弹出和隐藏

下面是效果图:

 

 

主要类:

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值