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