recycleview实现拼多多首页水平滑动效果
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了recycleview实现拼多多首页水平滑动效果的具体代码,供大家参考,具体内容如下
1.说明 本例子模仿拼多多首页的水平菜单,原本计划用viewpager实现,但是太麻烦,不合适,尝试用recycleview实现,亲测可运行,自定义支持各种样式效果,高度扩展
2.效果图:
3.下载地址
4.首页 贴一下核心代码 需要源码的请自行下载
package com.example.mepositry;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
public class TwoActivity extends AppCompatActivity implements PagerGridLayoutManager
.PageListener {
private int mRows = 2; //设置行数
private int mColumns = 4; //设置列数
private RecyclerView mRecyclerView;
private MyAdapter2 mAdapter;
private PagerGridLayoutManager mLayoutManager;
private RelativeLayout lineParent;
private int mTotal = 0;
private int mCurrent = 0;
private View lineChild;
private String[] names = {"多多果园","九块九特卖","多多爱消除","天天领现金"
,"行家帮你选","限时秒杀","断码清仓","跟着好评买"
,"充值中心","医药馆","签到","多多赚大钱"
,"砍价免费拿","多多精灵","省钱月卡","现金大转盘"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
lineParent = findViewById(R.id.rl_line_parent);
lineChild = findViewById(R.id.view_line_child);
mLayoutManager = new PagerGridLayoutManager(mRows, mColumns, PagerGridLayoutManager
.HORIZONTAL);
// 系统带的 RecyclerView,无需自定义
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
// 水平分页布局管理器
mLayoutManager.setPageListener(this); // 设置页面变化监听器
mRecyclerView.setLayoutManager(mLayoutManager);
// 如果需要查看调试日志可以设置为true,一般情况忽略即可
PagerConfig.setShowLog(true);
initData();
}
private void initData() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 16; i++) {
list.add(names[i]);
}
// mAdapter.refreshDataList(list);
// 使用原生的 Adapter 即可
mAdapter = new MyAdapter2(TwoActivity.this, list);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onPageSizeChanged(int pageSize) {
mTotal = pageSize;
Log.e("TAG", "总页数 = " + pageSize);
}
@Override
public void onPageSelect(int pageIndex, int pageSize) {
mCurrent = pageIndex;
Log.e("TAG", "选中页码 = " + pageIndex + "\t" + pageSize);
//计算滚动条宽度
float proportion = (float) ((pageIndex + 1) / pageSize);
float transMaxRange = lineParent.getWidth() - lineChild.getWidth();
//设置滚动条移动
lineChild.setTranslationX(transMaxRange * proportion);
}
}
5.适配器
package com.example.mepositry;
import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MyAdapter2 extends RecyclerView.Adapter<BaseRecyclerViewHolder> {
private List<String> mDataList = new ArrayList<>();
private Context context;
public MyAdapter2(Context mContext, List<String> list) {
this.context=mContext;
this.mDataList = list;
}
@Override
public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.layout_item2, parent, false);
return new BaseRecyclerViewHolder(view);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(BaseRecyclerViewHolder holder, final int position) {
TextView name = holder.findBindItemView(R.id.tv_title);
name.setText("id:"+position+mDataList.get(position));
//抽象方法
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("TAG", "holder.itemView:" + position);
}
});
}
@Override
public int getItemCount() {
return mDataList.size();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341