您的位置:首页 > 移动开发 > Android开发

Android 5.0 Design RecycleView

2015-04-24 09:17 183 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: