Recyclerview无法控制视图(Recyclerview not able to control view)

编程入门 行业动态 更新时间:2024-10-23 08:40:17
Recyclerview无法控制视图(Recyclerview not able to control view)

我正在使用一个水平的LinearLayoutManager的RecyclerView 。 我在每个视图中显示3个项目并使用无限滚动。 我的问题是它们是3张图像,我希望中间图像放大2倍但是我无法控制控制器来解决这个问题,有没有办法做到这一点?

ex)[] [] [] =一个视图,但中间一个视图大小是2倍,用户可以左右滚动

代码片段:以下是我将活动初始化为适配器的方法:

LinearLayoutManager layout = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false); // constant data constants = new Constants(); recyclerView = (RecyclerView) findViewById(R.id.ModelCarousal); recyclerView.setLayoutManager(layout); recyclerView.setAdapter(new Model_Controller(getApplicationContext(), constants.Constants())); recyclerView.addOnScrollListener(new EndlessScrollListener(layout) { @Override public void onLoadMore(int page, int totalItemsCount) { // Triggered only when new data needs to be appended to the list } });

适配器:

public class Model_Controller extends RecyclerView.Adapter<Model_Controller.MyViewHolder> { Context mContext; List<Model> models; int[] img = new int[]{R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item ,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item ,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item}; // view holder of badges public class MyViewHolder extends RecyclerView.ViewHolder { public ImageView viewTwo; public MyViewHolder(View view) { super(view); viewTwo = (ImageView) view.findViewById(R.id.model_child); } } // constructor public Badge_Controller(Context c, List<Model> modelSet){ mContext = c; models = modelSet; } int height; int width; // returning the set of the holder for the child layout of badge view @Override public Model_Controller.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.model_child, parent, false); height = parent.getMeasuredHeight() * 4; width = parent.getWidth()*2; return new MyViewHolder(itemView); } // what the user is seeing @Override public void onBindViewHolder(MyViewHolder holder, int position) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) { Helpers helpers = new Helpers(); holder.viewTwo.setImageDrawable(mContext.getDrawable(img[position])); } } // size @Override public int getItemCount() { return models.size()+2; } @Override public int getItemViewType(int position) { if (position == 0 || position == getItemCount()-1) { return 1; } return 2; } }

I am using a RecyclerView with LinearLayoutManager thats horizontal. I am displaying 3 items per view and using endless scrolling. My issue is that they're 3 images and I want the middle image to be enlarged by 2X but I can't get control of the controller to figure that out, is there way to do this?

ex) [] [] [] = one view but the middle one would be 2X the size and user can scroll left and right

Code Snippet: Here is how I initialize in activity to adapter:

LinearLayoutManager layout = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false); // constant data constants = new Constants(); recyclerView = (RecyclerView) findViewById(R.id.ModelCarousal); recyclerView.setLayoutManager(layout); recyclerView.setAdapter(new Model_Controller(getApplicationContext(), constants.Constants())); recyclerView.addOnScrollListener(new EndlessScrollListener(layout) { @Override public void onLoadMore(int page, int totalItemsCount) { // Triggered only when new data needs to be appended to the list } });

Adapter:

public class Model_Controller extends RecyclerView.Adapter<Model_Controller.MyViewHolder> { Context mContext; List<Model> models; int[] img = new int[]{R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item ,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item ,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item,R.drawable.ic_item}; // view holder of badges public class MyViewHolder extends RecyclerView.ViewHolder { public ImageView viewTwo; public MyViewHolder(View view) { super(view); viewTwo = (ImageView) view.findViewById(R.id.model_child); } } // constructor public Badge_Controller(Context c, List<Model> modelSet){ mContext = c; models = modelSet; } int height; int width; // returning the set of the holder for the child layout of badge view @Override public Model_Controller.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.model_child, parent, false); height = parent.getMeasuredHeight() * 4; width = parent.getWidth()*2; return new MyViewHolder(itemView); } // what the user is seeing @Override public void onBindViewHolder(MyViewHolder holder, int position) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) { Helpers helpers = new Helpers(); holder.viewTwo.setImageDrawable(mContext.getDrawable(img[position])); } } // size @Override public int getItemCount() { return models.size()+2; } @Override public int getItemViewType(int position) { if (position == 0 || position == getItemCount()-1) { return 1; } return 2; } }

最满意答案

尝试这个 ....

首先在Recycler适配器中声明常量

private static final int TYPE_1X = 0; private static final int TYPE_2X = 1;

获取Recyler项目的位置

@Override public int getItemViewType(int position) { final int type = position % 3; switch (type) { case 1: return TYPE_2X; } return TYPE_1X; }

获取viewtype并基于视图类型,您可以调整大小2X。

@Override public Model_Controller.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final int type = viewType; View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.model_child, parent, false); switch (type) { case TYPE_1X: height = parent.getMeasuredHeight() / 2; width = parent.getWidth()/2; break; case TYPE_2X: height = parent.getMeasuredHeight() ; width = parent.getWidth(); break; } RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams( width, //width height);//height itemView.setLayoutParams(lp); return new MyViewHolder(itemView); }

Try this ....

first declare constants in your Recycler adaptor

private static final int TYPE_1X = 0; private static final int TYPE_2X = 1;

Get the position of Recyler item

@Override public int getItemViewType(int position) { final int type = position % 3; switch (type) { case 1: return TYPE_2X; } return TYPE_1X; }

Get the viewtype and base on view type you can resize 2X.

@Override public Model_Controller.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final int type = viewType; View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.model_child, parent, false); switch (type) { case TYPE_1X: height = parent.getMeasuredHeight() / 2; width = parent.getWidth()/2; break; case TYPE_2X: height = parent.getMeasuredHeight() ; width = parent.getWidth(); break; } RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams( width, //width height);//height itemView.setLayoutParams(lp); return new MyViewHolder(itemView); }

更多推荐

new,public,int,view,电脑培训,计算机培训,IT培训"/> <meta name="descripti

本文发布于:2023-07-08 19:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1080228.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   Recyclerview   view   control

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!