Я пытаюсь создать эффект предварительного просмотра в представлении «Галерея» и сталкиваюсь с проблемами с Gallery.getChildAt (int position), которая в большинстве случаев возвращает значение null. Он должен возвращать ноль только тогда, когда дочерний элемент не отображается, что здесь не так, поскольку пользователю необходимо прокрутить его. Есть ли способ исправить это, или я должен изменить свой подход? Вот мой код:
gallery.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_UP){
preview_container.setVisibility(View.GONE);
}
else if(event.getDownTime()>2500){
int position = gallery.pointToPosition((int)event.getX(), (int)event.getY());
if (position!=AdapterView.INVALID_POSITION){
View child = gallery.getChildAt(position);
if(child!=null){
Bitmap tmp_bitmap = book.imageForPreview(position);
previewImg.setImageBitmap(tmp_bitmap);
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(tmp_bitmap.getWidth()+2, tmp_bitmap.getHeight()+2,Gravity.NO_GRAVITY);
int[] coord = new int[2];
child.getLocationOnScreen(coord);
int y = MMBookReader.this.getWindowManager().getDefaultDisplay().getHeight()-(tmp_bitmap.getHeight()+view.getHeight());
int x = (int) coord[0]-(tmp_bitmap.getWidth()-child.getWidth())/2;
layout.leftMargin=x;
layout.topMargin=y;
preview_container.setVisibility(View.VISIBLE);
preview_container.setLayoutParams(layout);
previewPageCount.setText(book.getMmpages().get(position).getPosition()+"/"+book.getPages());
}
}
else
preview_container.setVisibility(View.GONE);
}
return false;
}
});
РЕДАКТИРОВАТЬ: я не пытаюсь заполнить представление галереи, я уже закончил с этой частью и хорошо знаю об использовании класса Adapter.
РЕДАКТИРОВАТЬ 2: Решено путем изменения строки:
View child = gallery.getChildAt(position);
с:
View child = gallery.getChildAt( position - gallery.getFirstVisiblePosition() );