Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在RecyclerView中实现部分可见的下一项_Android_Android Recyclerview - Fatal编程技术网

Android 如何在RecyclerView中实现部分可见的下一项

Android 如何在RecyclerView中实现部分可见的下一项,android,android-recyclerview,Android,Android Recyclerview,我使用onFling一次滚动一个项目,只希望一个项目在页面上完全可见,而下一个项目部分可见 我想在RecyclerView中实现这一点。下面是适配器代码,它的imageView代替了cardView(如图所示): public class SimpleItemRecyclerViewAdapter extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> { private final Array

我使用onFling一次滚动一个项目,只希望一个项目在页面上完全可见,而下一个项目部分可见

我想在RecyclerView中实现这一点。下面是适配器代码,它的imageView代替了cardView(如图所示):

public class SimpleItemRecyclerViewAdapter extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> {

private final ArrayList<Movie> mValues;

public SimpleItemRecyclerViewAdapter(ArrayList<Movie> items) {
    mValues = items;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.movie_list_content, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.mItem = mValues.get(position);
    Context context = holder.imageView.getContext();
    String logo = mValues.get(position).getPosterPath();
    Picasso.with(context).load(logo).into(holder.imageView);

}

@Override
public int getItemCount() {
    return mValues.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public final View mView;
    public ImageView imageView;
    public Movie mItem;
    MainActivity mainActivity = new MainActivity();

    public ViewHolder(View view) {
        super(view);
        mView = view;
        imageView = (ImageView) view.findViewById(R.id.image_movie_poster);

        android.view.ViewGroup.LayoutParams params = imageView.getLayoutParams();
        params.height = (int) (mainActivity.height * 0.7);
        imageView.setLayoutParams(params);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "Clicked", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public String toString() {
        return "Blah";
    }
}
}
公共类SimpleItemRecycleServiceAdapter扩展了RecyclerView.Adapter{ 私有最终数组列表mValues; 公共SimpleItemRecycleServiceAdapter(ArrayList项){ M值=项目; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ View=LayoutInflater.from(parent.getContext()) .充气(R.layout.movie\u list\u content,parent,false); 返回新的ViewHolder(视图); } @凌驾 公共无效onBindViewHolder(最终视图持有人,最终整型位置){ holder.mItem=mValues.get(位置); Context Context=holder.imageView.getContext(); 字符串logo=mValues.get(position.getPosterPath(); 毕加索.with(context).load(logo).into(holder.imageView); } @凌驾 public int getItemCount(){ 返回mValues.size(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 公共最终视图mView; 公共影像视图; 公共电影螨; MainActivity MainActivity=新的MainActivity(); 公共视图持有者(视图){ 超级(视图); mView=视图; imageView=(imageView)view.findViewById(R.id.image\u movie\u poster); android.view.ViewGroup.LayoutParams params=imageView.getLayoutParams(); 参数高度=(int)(mainActivity.height*0.7); imageView.setLayoutParams(参数); imageView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ Toast.makeText(view.getContext(),“Clicked”,Toast.LENGTH_SHORT.show(); } }); } @凌驾 公共字符串toString(){ 返回“废话”; } } }
这适用于我的水平回收视图。您可以只更改为垂直布局管理器

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
    final SnapHelper snapHelper = new PagerSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);

    recyclerView.post(new Runnable() {
        @Override
        public void run() {
            recyclerView.setAdapter(new TestAdapter());
        }
    });
}

private class TestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
        final View view =
                LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.test_card, parent, false);
        int width = recyclerView.getWidth();
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.width = (int)(width * 0.8);
        view.setLayoutParams(params);
        return new TestViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
        TestViewHolder holder = (TestViewHolder) viewHolder;
        holder.numText.setText(((Integer) i).toString());
    }

    @Override
    public int getItemCount() {
        return 20;
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(新的LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
final SnapHelper SnapHelper=new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
recyclerView.post(新的Runnable(){
@凌驾
公开募捐{
setAdapter(newtestAdapter());
}
});
}
私有类TestAdapter扩展了RecyclerView.Adapter
{
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int i){
最终视图=
LayoutInflater.from(parent.getContext())
.充气(R.layout.test_卡,父级,假);
int width=recyclerView.getWidth();
ViewGroup.LayoutParams params=view.getLayoutParams();
参数宽度=(int)(宽度*0.8);
view.setLayoutParams(参数);
返回新的TestViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder ViewHolder,int i){
TestViewHolder=(TestViewHolder)viewHolder;
holder.numText.setText(((整数)i.toString());
}
@凌驾
public int getItemCount(){
返回20;
}
}

您可以使用自定义布局管理器来控制每个项目的显示方式

class RatioLayoutManager构造函数(
上下文:上下文?,
@RecyclerView.Orientation方向:Int=RecyclerView.VERTICAL,
reverseLayout:Boolean=false
):LinearLayoutManager(上下文、方向、反转){
var比率=0.7f
private val horizontalSpace get()=width-paddingStart-paddingEnd
private val verticalSpace get()=width-paddingTop-paddingBottom
重写fun generateDefaultLayoutParams()=
scaledLayoutParams(super.GeneratedFaultLayoutParams())
覆盖有趣的generateLayoutParams(lp:ViewGroup.LayoutParams?)=
scaledLayoutParams(super.generateLayoutParams(lp))
覆盖有趣的generateLayoutParams(c:Context?,attrs:AttributeSet?)=
scaledLayoutParams(super.generateLayoutParams(c,attrs))
private fun scaledLayoutParams(layoutParams:RecyclerView.layoutParams)=
layoutParams.apply{
何时(定向){
水平->宽度=(水平空间*比率+0.5).toInt()
垂直->高度=(垂直空间*比率+0.5).toInt()
}
}
}

我认为您必须找到屏幕高度,并根据设置的卡高度,请查看以下库@RaviGadipudi。事实上,我尝试了这个库,但无法获得我想要的。我希望只有下一个项目应该是可见的,而不是前一个。但当我使用这个库时,上一个和下一个项目都变得略微可见了。@masoudvali快到了,谢谢,伙计。只是一个小问题,当我向下滚动时,应用程序工作正常,但当我向上滚动时,它显示的是上一个项目,而不是下一个项目。@BhaveshMisri你能把你的适配器代码放在这里吗。但是第一个屏幕中的下一个项目将有更多的可见部分,而在下一个屏幕中,从上一个屏幕到下一个屏幕的可见部分将更少。如何确保相同的部分在所有情况下都可见?