2016-11-29 5 views
0

Я использую RecyclerView с LinearLayoutManager thats horizontal. Я показываю 3 пункта за просмотр и использую бесконечную прокрутку. Моя проблема в том, что у них 3 изображения, и я хочу, чтобы среднее изображение было увеличено на 2X, но я не могу получить контроль над контроллером, чтобы понять это, есть ли способ сделать это?Recyclerview не в состоянии контролировать вид

ех) [] [] [] = один вид, но средний будет 2X размер и пользователь может прокручивать влево и вправо

Код сниппета: Вот как я инициализировать в деятельности к адаптеру:

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; 
} 
} 
+1

можно отправить свой код. –

+0

ОК, я добавил, извините! – codeNinjaBro

ответ

1

Попробуйте это ....

первых объявить константы в вашем 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); 
} 
0

нормально @Kiran Dsouza вашего ответ правильный, я должен был изменить относительную Params компоновки и он работает на первое начальную точку зрения, но когда я прокручиваю горизонтальным и обратно он уже не работает, как она восходит к его первоначальный вид.

+0

вы не устанавливаете высоту и ширину LayoutParams для просмотра, я обновил код, и это должно быть работа. Я не нахожу, если вы все еще испытываете трудности, пожалуйста, поделитесь своим полным кодом. –

+0

это сработало. благодаря – codeNinjaBro

 Смежные вопросы

  • Нет связанных вопросов^_^