android recyclerview 横向移动,Android应用开发之Andriod自定义RecyclerView实现Gallery效果横向滑动...

本文介绍了如何在Android应用中使用自定义RecyclerView模拟Gallery效果,实现图片横向滑动,适用于天气应用的界面设计。通过实例代码展示了如何创建布局、设置适配器和监听器,以及关键的滚动逻辑。
摘要由CSDN通过智能技术生成

本文将带你了解Android应用开发Andriod自定义RecyclerView实现Gallery效果横向滑动,希望本文对大家学Android有所帮助。

Andriod自定义RecyclerView实现Gallery效果横向滑动。

大家好,一个RecyclerView   横向滑动的效果是不是值得借鉴呢,下面我们来看看我做的效果:

下面是需求的效果图:

因为需要做一个天气的界面效果,所以之前没有经验的我不得不搜索资料来实现,下面我们来看看代码吧:

1.Activity

public   class MainActivity extends AppCompatActivity implements RecyAdapter.OnItemClickListener   {

private String TAG="HorizontalActivity";

private Integer[] mImgIds = {R.mipmap.weather,   R.mipmap.ic_launcher, R.mipmap.weather, R.mipmap.ic_launcher,   R.mipmap.weather,

R.mipmap.weather,

R.mipmap.ic_launcher_round,   R.mipmap.ic_launcher, R.mipmap.weather,

R.mipmap.ic_launcher_round, R.mipmap.weather};

private List   datas;

private RecyAdapter   recyAdapter;

private Handler mHandler=new Handler();

private LinearLayoutManager   layoutManager;

private int oldItem=0;

private RecyclerView   recyclerview;

private ImageView img;

@Override

protected void onCreate(Bundle savedInstanceState)   {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img = (ImageView)   findViewById(R.id.img);

recyclerview = (RecyclerView)   findViewById(R.id.recyclerview);

initData();

initRecy();

img.setImageResource(datas.get(0));

recyAdapter.setOnItemClickListener(this);

}

private void initRecy() {

recyAdapter=new RecyAdapter(this,datas);

layoutManager = new LinearLayoutManager(this);

layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

recyclerview.setLayoutManager(layoutManager);

recyclerview.setAdapter(recyAdapter);

}

private void initData() {

datas=new ArrayList<>();

for (int i   = 0; i   0){

//                  oldItem=firstItem;

//                  img.setImageResource(datas.get(oldItem%datas.size()));

//              }

//

//              Log.e(TAG, "run: firstItem:"+firstItem   );

//

//

//              mHandler.postDelayed(scrollRunnable,10);

//          }

//      };

@Override

public void onPointerCaptureChanged(boolean hasCapture) {

}

@Override

protected void onResume() {

super.onResume();

//          mHandler.postDelayed(scrollRunnable,10);

}

@Override

protected void onStop() {

super.onStop();

//          mHandler.removeCallbacks(scrollRunnable);

}

@Override

public void onItemClick(View view, int tag) {

//          img.setImageResource(datas.get(tag));//设置图片

Toast.makeText(this,"第"+tag+"张图片被点击了",Toast.LENGTH_SHORT).show();

}

}

2.RecyAdapter

public class RecyAdapter extends RecyclerView.Adapter   implements View.OnClickListener   {

private Context   context;

private List   datas;

private OnItemClickListener onItemClickListener;

public RecyAdapter(Context context,   List datas) {

this.context = context;

this.datas = datas;

}

@Override

public ViewHolder onCreateViewHolder(ViewGroup   parent, int viewType) {

View view =   LayoutInflater.from(context).inflate(R.layout.item_horizontal, parent,   false);

ViewHolder vh=new ViewHolder(view);

view.setOnClickListener(this);

return vh;

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

int newPos=position%datas.size();

holder.img.setImageResource(datas.get(newPos));

holder.itemView.setTag(position);

}

@Override

public int getItemCount() {

return datas.size();

}//Integer.MAX_VALUE

@Override

public void onClick(View view) {

if(onItemClickListener!=null){

onItemClickListener.onItemClick(view,   (Integer) view.getTag());

}

}

class ViewHolder extends RecyclerView.ViewHolder   {

ImageView   img;

public ViewHolder(View itemView) {

super(itemView);

img=itemView.findViewById(R.id.img);

}

}

public void setOnItemClickListener(OnItemClickListener   listener){

this.onItemClickListener=listener;

}

interface OnItemClickListener{

&nbs

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现九宫格横向左右滑动的功能,可以使用 RecyclerView 和 GridLayoutManager 来实现。以下是具体步骤: 1. 在布局文件中,添加 RecyclerView 控件: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="horizontal" /> ``` 2. 在代码中,初始化 RecyclerView 和 GridLayoutManager,并设置相关属性: ```java RecyclerView recyclerView = findViewById(R.id.recycler_view); GridLayoutManager layoutManager = new GridLayoutManager(this, 3); // 设置列数为3 layoutManager.setOrientation(RecyclerView.HORIZONTAL); // 设置水平滚动 recyclerView.setLayoutManager(layoutManager); int spacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing); // 设置item之间的间距 recyclerView.addItemDecoration(new GridSpacingItemDecoration(3, spacing, true)); // 通过自定义ItemDecoration来实现 ``` 其中,GridSpacingItemDecoration 是自定义的一个 RecyclerView.ItemDecoration,用来设置 item 之间的间距,具体实现如下: ```java public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { private int spanCount; private int spacing; private boolean includeEdge; public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) { this.spanCount = spanCount; this.spacing = spacing; this.includeEdge = includeEdge; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); // item position int column = position % spanCount; // item column if (includeEdge) { outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing) outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing) if (position < spanCount) { // top edge outRect.top = spacing; } outRect.bottom = spacing; // item bottom } else { outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing) outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing) if (position >= spanCount) { outRect.top = spacing; // item top } } } } ``` 3. 创建 RecyclerView.Adapter 和 RecyclerView.ViewHolder,并在 onBindViewHolder() 方法中设置 item 的内容: ```java public class GridAdapter extends RecyclerView.Adapter<GridAdapter.GridViewHolder> { private List<Integer> dataList; // 数据源 public GridAdapter(List<Integer> dataList) { this.dataList = dataList; } @NonNull @Override public GridViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_grid, parent, false); return new GridViewHolder(view); } @Override public void onBindViewHolder(@NonNull GridViewHolder holder, int position) { holder.imageView.setImageResource(dataList.get(position)); // 设置图片资源 } @Override public int getItemCount() { return dataList.size(); } static class GridViewHolder extends RecyclerView.ViewHolder { ImageView imageView; GridViewHolder(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.image_view); } } } ``` 4. 最后在 Activity 中设置 RecyclerView 的 adapter: ```java List<Integer> dataList = new ArrayList<>(); // 数据源 dataList.add(R.drawable.pic1); dataList.add(R.drawable.pic2); dataList.add(R.drawable.pic3); dataList.add(R.drawable.pic4); dataList.add(R.drawable.pic5); dataList.add(R.drawable.pic6); dataList.add(R.drawable.pic7); dataList.add(R.drawable.pic8); dataList.add(R.drawable.pic9); GridAdapter adapter = new GridAdapter(dataList); recyclerView.setAdapter(adapter); ``` 这样就可以实现九宫格横向左右滑动效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值