Man*_*dan 8 android horizontalscrollview
我动态加载了一些(1000)图像HorizontalcsrollView.用户可以HorizontalScrollView正面和背面滚动.
我需要的是,在滚动时找到屏幕中心的项目位置.FYR,我HorizontalScrollView从屏幕中心开始,到中心结束.
我试过addOnScrollChangedListener了HorizontalScrollview,但我无法得到中心项目的确切位置.
编辑:尝试获取x位置和左侧位置,同时滚动,但始终返回0.
注意,我已经将padding左右设置为my HorizontalScrollView.
它始终从屏幕中心开始,到屏幕中心结束.
horizontalScrollView1.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int x1 = horizontalScrollView1.getLeft();
int getX=(int)horizontalScrollView1.getX();
}
});
Run Code Online (Sandbox Code Playgroud)
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="15dp"
android:fillViewport="true"
android:scrollbars="none">
<RelativeLayout
android:id="@+id/layLandmarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<View
android:id="@+id/viewWhite"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_centerInParent="true"
android:background="@color/white" />
</RelativeLayout>
</HorizontalScrollView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
班级档案:
ImageView iv;
RelativeLayout layLandmarks = (RelativeLayout) findViewById(R.id.layLandmarks);
FrameLayout.LayoutParams lp1 = new FrameLayout.LayoutParams(2000, FrameLayout.LayoutParams.WRAP_CONTENT);
layLandmarks.setLayoutParams(lp1);
JSONObject landmarks = jsonObject1.getString("landmarks");
JSONArray jsonArray1 = new JSONArray(landmarks);
for(int j = 0; j<jsonArray1.length();j++){
JSONObject jsonObject2 = jsonArray1.getJSONObject(0);
landmarkId = jsonObject2.getString("id");
landmarkName = jsonObject2.getString("title");
landmarkDesc = jsonObject2.getString("description");
latitude = jsonObject2.getDouble("latitude");
longitude = jsonObject2.getDouble("longitude");
video_time = jsonObject2.getString("video_time_in_sec");
// Log.e("video_time_in_sec", video_time);
landmarkIcon = jsonObject2.getString("image");
iv = new ImageView(VideoPreviewWithRecycler.this);
iv.setId(i);
Picasso.with(VideoPreviewWithRecycler.this)
.load(landmarkIcon)
.resize(40, 45)
.into(iv);
params = new RelativeLayout.LayoutParams(40, 45);
params.topMargin = 0;
params.leftMargin = Integer.parseInt(video_time);
params.addRule(RelativeLayout.RIGHT_OF, 0);
layLandmarks.addView(iv, params);
}
Run Code Online (Sandbox Code Playgroud)
我在水平滚动视图中动态加载了一些(1000)图像。用户可以前后滚动水平滚动视图。我需要的是,在滚动时找到屏幕中心的项目位置。FYR,我从屏幕中心开始水平滚动视图并在中心结束。我尝试过 HorizontalScrollview 的 addOnScrollChangedListener ,但无法获得中心项目的确切位置。
您不得使用 ahorizontal scrollview加载那么多图像,否则设备会滞后,并且您的应用程序将停止响应。Scollviews用于加载简单的文本视图或少量低分辨率图像(例如图标)。您应该做的是使用Recycler视图并将方向设置为水平。
LinearLayoutManager listManager = new LinearLayoutManager( getActivity(),LinearLayoutManager.HORIZONTAL, false);
horizontalRecyclerView.setHasFixedSize(false);
horizontalRecyclerView.setLayoutManager(listManager);
horizontalRecyclerView.setAdapter(new ContentFileterAdapter());
Run Code Online (Sandbox Code Playgroud)
然后您可以添加 aviewholder和 anadapter来保存您的图像。您还应该使用缓存库(例如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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后要找到您的中心view或位置,您只需调用LinearLayoutManager
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 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |