Я динамически загрузил несколько (1000) изображений внутри горизонтальной прокрутки.Пользователь может прокручивать горизонтальную прокрутку спереди и сзади.Что мне нужно, так это найти позицию элемента в центре экрана при прокрутке.БЮР, я начинаю горизонтальную прокрутку из центра экрана и заканчиваю в центре.Я попытался с addOnScrollChangedListener от HorizontalScrollview, но не смог получить точное положение центрального элемента.
Вы не должны использовать horizontal scrollview
для загрузки такого количества изображений, вызависание устройства, и ваше приложение перестанет отвечать.Scollviews
предназначены для загрузки просто текстовых представлений или небольшого количества изображений с низким разрешением, таких как значки.Что вы должны сделать, это использовать Recycler
вид и установить горизонтальную ориентацию.
LinearLayoutManager listManager = new LinearLayoutManager( getActivity(),LinearLayoutManager.HORIZONTAL, false);
horizontalRecyclerView.setHasFixedSize(false);
horizontalRecyclerView.setLayoutManager(listManager);
horizontalRecyclerView.setAdapter(new ContentFileterAdapter());
Затем вы можете добавить viewholder
и adapter
, которые содержат ваши изображения.Вы также должны использовать библиотеку кэширования, такую как UIL , чтобы загрузить столько изображений
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView mImageView;
public ViewHolder(View itemView) {
super(itemView);
mImageView=itemView.findViewById(R.id.yourImageView);
}
}
private class ImagesAdapter extends RecyclerView.Adapter<ViewHolder>{
private String[] mImagesPaths;
public ImagesAdapter(String[] mImagesPaths){
this.mImagesPaths = mImagesPaths;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup container, int viewType) {
return new ViewHolder(LayoutInflater.from(container.getContext()).inflate(R.layout.yourAdapterItemLayout, container, false));
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
ImageLoader.getInstance().displayImage(Uri.decode(mImagesPaths[position]), holder.mImageView);}
@Override
public int getItemCount() {
return mImagesPaths.length;
}
}
А затем найти свой центр view
или положение, которое вы просто называете LinearLayoutManager
* 1020.*
int lastindex = listManager.findLastCompletelyVisibleItemPosition();
int firstindex = listManager.findFirstCompletelyVisibleItemPosition();
//The middle visible position
int centerindex = firstindex/2 + lastindex/2 + (firstindex%2 + lastindex%2)/2;
//The middle visible view
View view=(View)listManager.findViewByPosition(centerindex );