用RecyclerView+CardView实现 商城首页
来源:互联网 发布:淘宝介入对卖家不公平 编辑:程序博客网 时间:2024/04/30 21:06
商城首页用来展示热门活动的View,偶数和奇数 位上的View不同。
1)CardView,扩展 FrameLayout 类别并让您能够显示卡片内的信息,这些信息在整个平台中拥有一致的呈现方式。CardView 小组件可拥有阴影和圆角。
2)实现步骤
①添加依赖
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
②加入RecyclerView布局,得到RecyclerView实例,通过网络操作得到数据源,都与前面相同
③实现Adapter
public class HomeCatgoryAdapter extends RecyclerView.Adapter<HomeCatgoryAdapter.ViewHolder> {
private List<HomeCampaign> mDatas;
private Context mContext;
public HomeCatgoryAdapter(List<HomeCampaign> datas, Context context){
mDatas = datas;
this.mContext = context;
}
private OnCampaignClickListener mListener;
public void setOnCampaignClickListener(OnCampaignClickListener listener){
this.mListener = listener;
}
public interface OnCampaignClickListener{
void onClick(View view, Campaign campaign);
}
private static int VIEW_TYPE_L=0;
private static int VIEW_TYPE_R=1;
private LayoutInflater mInflater;
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
mInflater = LayoutInflater.from(viewGroup.getContext());
if(type == VIEW_TYPE_R){
return new ViewHolder(mInflater.inflate(R.layout.template_home_cardview2,viewGroup,false));
}
return new ViewHolder(mInflater.inflate(R.layout.template_home_cardview,viewGroup,false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
HomeCampaign homeCampaign = mDatas.get(i);
viewHolder.textTitle.setText(homeCampaign.getTitle());
Picasso.with(mContext).load(homeCampaign.getCpOne().getImgUrl()).into(viewHolder.imageViewBig);
Picasso.with(mContext).load(homeCampaign.getCpTwo().getImgUrl()).into(viewHolder.imageViewSmallTop);
Picasso.with(mContext).load(homeCampaign.getCpThree().getImgUrl()).into(viewHolder.imageViewSmallBottom);
}
@Override
public int getItemCount() {
return mDatas.size();
}
@Override
public int getItemViewType(int position) {
if(position % 2==0){
return VIEW_TYPE_R;
}
else return VIEW_TYPE_L;
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView textTitle;
ImageView imageViewBig;
ImageView imageViewSmallTop;
ImageView imageViewSmallBottom;
public ViewHolder(View itemView) {
super(itemView);
textTitle = (TextView) itemView.findViewById(R.id.text_title);
imageViewBig = (ImageView) itemView.findViewById(R.id.imgview_big);
imageViewSmallTop = (ImageView) itemView.findViewById(R.id.imgview_small_top);
imageViewSmallBottom = (ImageView) itemView.findViewById(R.id.imgview_small_bottom);
imageViewBig.setOnClickListener(this);
imageViewSmallTop.setOnClickListener(this);
imageViewSmallBottom.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(mListener !=null){
anim(v);
}
}
private void anim(final View v){
ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationX", 0.0F, 360.0F)
.setDuration(200);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
HomeCampaign campaign = mDatas.get(getLayoutPosition());
switch (v.getId()){
case R.id.imgview_big:
mListener.onClick(v, campaign.getCpOne());
break;
case R.id.imgview_small_top:
mListener.onClick(v, campaign.getCpTwo());
break;
case R.id.imgview_small_bottom:
mListener.onClick(v,campaign.getCpThree());
break;
}
}
});
animator.start();
}
}
}
④实例化Adapter,设置监听器,将RecyclerView与dapter绑定
mAdatper = new HomeCatgoryAdapter(homeCampaigns,getActivity());
mAdatper.setOnCampaignClickListener(new HomeCatgoryAdapter.OnCampaignClickListener() {
@Override
public void onClick(View view, Campaign campaign) {
Toast.makeText(getContext(), "clicked", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getActivity(), WareListActivity.class);
intent.putExtra(Contants.COMPAINGAIN_ID,campaign.getId());
startActivity(intent);
}
});
mRecyclerView.setAdapter(mAdatper);
⑤自定义ItemDocoration
public class CardViewtemDecortion extends RecyclerView.ItemDecoration {
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(c, parent, state);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int layoutOrientation = getOrientation(parent);
if (layoutOrientation == LinearLayoutManager.VERTICAL) {
outRect.top = 10;
outRect.left=5;
outRect.right=5;
} else if(layoutOrientation == LinearLayoutManager.HORIZONTAL) {
outRect.left = 5;
}
}
private int getOrientation(RecyclerView parent) {
if (parent.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();
return layoutManager.getOrientation();
} else throw new IllegalStateException("DividerItemDecoration can only be used with a LinearLayoutManager.");
}
}
⑥将自定义ItemDocoration传入RecyclerView中
mRecyclerView.addItemDecoration(new CardViewtemDecortion());
⑦为RecyclerView传入布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
⑧RecyclerView中每个Item的布局为:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="#fff"
app:contentPadding="10dp"
app:cardCornerRadius="4dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
......
</LinearLayout>
</android.support.v7.widget.CardView>
- 用RecyclerView+CardView实现 商城首页
- 商城项目实战 | 5.1 RecyclerView 和 CardView 更配 实现首页商品分类
- 高仿各大商城首页---使用分类型的RecyclerView来实现
- 高仿各大商城首页---使用分类型的RecyclerView来实现
- BootStrap实现商城首页
- DIV+CSS实现商城首页
- RecyclerView和CardView实现列表功能,用LeanCloud所存储的数据中填充RecyclerView
- RecyclerView+CardView
- RecyclerView&CardView
- Andorid--RecyclerView与CardView实现卡片列表
- android新特性:商城首页一键回到顶部功能实现(包括ListView, RecyclerView 和 ScrollView)
- jQuery实现商城首页幻灯片的效果
- Material Design:利用RecyclerView CardView实现新闻卡片样式
- Android Material Design之在RecyclerView中嵌套CardView实现
- Material Design:利用RecyclerView CardView实现新闻卡片样式
- 使用RecyclerView和CardView,实现知乎日报精致布局
- 好看的照片墙效果实现(RecyclerView+Cardview+Palette)
- Material Design:利用RecyclerView CardView实现新闻卡片样式
- 自定义SlideBar
- HDU 1285 确定比赛名次
- c语言结构体---初始化bug2
- Mac 如何修改用户名和用户文件夹
- Java基础2--常用的运算符--imooc
- 用RecyclerView+CardView实现 商城首页
- 过滤器
- java中volatile关键字的含义
- Android WebView常见问题及解决方案汇总
- leetcode题解日练--2016.6.26
- nginx 错误, flume 集锦,太多bugs netstat -ntpl
- Jquery.Pagination分页插件的学习
- AisMVC,一款仿SpringMVC框架的轻便快捷的Java MVC开发框架
- 天平称盐问题