如何使 Horizontal Recycler View 中的 Horizontal Scroll View 工作?
How to make Horizontal Scroll View inside Horizontal Recycler View work?
我在类似的问题中搜索过,试过几个答案都没有解决..
我有 Horizontal Recycler View 显示城市名称和一些数据
问题是我将 canvas 条形图或 RV 图表如下图放在 Main Recycler View 适配器的每个位置并水平滚动此图表我将图表放在水平滚动视图中以在长水平方向上查看图表数据当从右向左滚动此图表时,反之亦然,但实际上它不会水平滚动,只有 Main Recycler view 水平滚动以在触摸它时显示城市,对于 RV 内的此图表,当触摸它滚动时不滚动(冻结)
回收站视图是否仅水平滚动并阻止其子项内的任何其他滚动??
这是我的回收站视图项目布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.NestedScrollView
android:id="@+id/scv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<androidx.cardview.widget.CardView
android:id="@+id/main_cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearLayoutWeather"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtCityName2"
android:textColor="@color/text_light"
android:textSize="42sp"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:paddingTop="10dp">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:id="@+id/imgWeather2"
android:src="@mipmap/ic_launcher"/>
<TextView
android:paddingLeft="10dp"
android:id="@+id/txtCityTemperature2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="30 C"
android:textColor="@color/text_light"
android:textSize="24sp"
android:textStyle="bold"
android:paddingTop="45dp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<HorizontalScrollView // here is the problem (doesn't scroll)
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:scrollbars="horizontal">
<WeatherChartViewBars2
android:id="@+id/bars"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isScrollContainer="true"
/>
</HorizontalScrollView>
</RelativeLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</RelativeLayout>
我尝试让 Recycler View 布局管理器垂直滚动,水平图表成功水平滚动,但是当 RV Horizontal 时,图表冻结而不滚动,尽管它在水平滚动视图中
这是我的房车
recyclerViewWeather.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL,
false));
adapter = new WeatherAdapter(this, cityList, dataManager);
recyclerViewWeather.setHasFixedSize(true);
recyclerViewWeather.setAdapter(adapter);
recyclerViewWeather.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE){
position = getCurrentItem();
try {
UpdateDailyWeather();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerViewWeather);
将您的 WeatherChartViewBars 包装在 HorizontalScrollView 内的 Horizontal LinearLayout 中。它会起作用。
@Brendon 让我走上了正确的道路,因为我必须在触摸水平滚动视图项目(如条形图)时停止在 Horizontal Recycler 视图中滚动,关键是水平滚动视图的 getparent。我还为适配器视图持有者中想要水平滚动它的每个项目都做了这件事
holder.horizontalScrollView.setOnTouchListener(new
View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
holder.horizontalScrollView.getParent().
requestDisallowInterceptTouchEvent(true);
return false;
}
});
我在类似的问题中搜索过,试过几个答案都没有解决.. 我有 Horizontal Recycler View 显示城市名称和一些数据 问题是我将 canvas 条形图或 RV 图表如下图放在 Main Recycler View 适配器的每个位置并水平滚动此图表我将图表放在水平滚动视图中以在长水平方向上查看图表数据当从右向左滚动此图表时,反之亦然,但实际上它不会水平滚动,只有 Main Recycler view 水平滚动以在触摸它时显示城市,对于 RV 内的此图表,当触摸它滚动时不滚动(冻结) 回收站视图是否仅水平滚动并阻止其子项内的任何其他滚动??
这是我的回收站视图项目布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.NestedScrollView
android:id="@+id/scv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<androidx.cardview.widget.CardView
android:id="@+id/main_cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearLayoutWeather"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtCityName2"
android:textColor="@color/text_light"
android:textSize="42sp"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:paddingTop="10dp">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:id="@+id/imgWeather2"
android:src="@mipmap/ic_launcher"/>
<TextView
android:paddingLeft="10dp"
android:id="@+id/txtCityTemperature2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="30 C"
android:textColor="@color/text_light"
android:textSize="24sp"
android:textStyle="bold"
android:paddingTop="45dp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<HorizontalScrollView // here is the problem (doesn't scroll)
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:scrollbars="horizontal">
<WeatherChartViewBars2
android:id="@+id/bars"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isScrollContainer="true"
/>
</HorizontalScrollView>
</RelativeLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</RelativeLayout>
我尝试让 Recycler View 布局管理器垂直滚动,水平图表成功水平滚动,但是当 RV Horizontal 时,图表冻结而不滚动,尽管它在水平滚动视图中
这是我的房车
recyclerViewWeather.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL,
false));
adapter = new WeatherAdapter(this, cityList, dataManager);
recyclerViewWeather.setHasFixedSize(true);
recyclerViewWeather.setAdapter(adapter);
recyclerViewWeather.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE){
position = getCurrentItem();
try {
UpdateDailyWeather();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerViewWeather);
将您的 WeatherChartViewBars 包装在 HorizontalScrollView 内的 Horizontal LinearLayout 中。它会起作用。
@Brendon 让我走上了正确的道路,因为我必须在触摸水平滚动视图项目(如条形图)时停止在 Horizontal Recycler 视图中滚动,关键是水平滚动视图的 getparent。我还为适配器视图持有者中想要水平滚动它的每个项目都做了这件事
holder.horizontalScrollView.setOnTouchListener(new
View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
holder.horizontalScrollView.getParent().
requestDisallowInterceptTouchEvent(true);
return false;
}
});