0

私はそれを水平にして使用していRecyclerViewますLinearLayoutManager。ビューごとに 3 つのアイテムを表示し、エンドレス スクロールを使用しています。私の問題は、それらが3つの画像であり、中央の画像を2倍に拡大したいのですが、コントローラーを制御してそれを理解できないことです。これを行う方法はありますか?

例) [] [] [] = 1 つのビューですが、中央のビューは 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;
}
}
4

2 に答える 2

1

これを試して ....

最初に Recycler アダプターで定数を宣言します

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

リサイクル品の位置を取得する

   @Override
    public int getItemViewType(int position) {
        final int type = position % 3;

        switch (type) {
            case 1:
                return TYPE_2X;
        }
        return TYPE_1X;
    }

ビュータイプを取得し、ビュー タイプに基づいて 2 倍にサイズ変更できます。

@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);
}
于 2016-11-29T06:12:48.437 に答える
0

わかりました@Kiran Dsouzaあなたの答えは正しいです相対レイアウトパラメータを変更する必要があり、最初の初期ビューで機能しましたが、水平にスクロールして元のビューに戻ると機能しなくなりました。

于 2016-11-30T23:26:31.627 に答える