Android -下拉重新整理,ViewPager和ScrollView巢狀滾動問題解決方案
》ViewPager和ScrollView巢狀滾動問題解決方案,即View衝突,重繪衝突的那部分的View的大小,寬度和高度,根據具體情況而定。
View檢視和圖層。。
下面的情況是重繪了ViewPager的高度:resetViewPagerHeight(int position)
-------------Java程式碼如下:
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
public class Solution3Activity extends FragmentActivity {
private ViewPager viewPager;
private ViewPagerFragmentAdapter adapter;
private MyListener listener = new MyListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_solution3);
viewPager = (ViewPager) findViewById(R.id.viewPager);
adapter = new ViewPagerFragmentAdapter(getSupportFragmentManager());
adapter.addFragment(new Content1Fragment());
adapter.addFragment(new Content2Fragment());
adapter.addFragment(new Content3Fragment());
viewPager.setOffscreenPageLimit(3);
viewPager.setOnPageChangeListener(listener);
viewPager.setAdapter(adapter);
// 模擬網路請求完成之後重置ViewPager高度
new myAsyncTask().execute();
}
/**
* 重新設定viewPager高度
*
* @param position
*/
public void resetViewPagerHeight(int position)
{
View child = viewPager.getChildAt(position);
if (child != null) {
child.measure(0, 0);
int h = child.getMeasuredHeight();
LinearLayout.LayoutParams params = (LayoutParams) viewPager
.getLayoutParams();
params.height = h + 50;
viewPager.setLayoutParams(params);
}
}
public class MyListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// 頁面切換後重置ViewPager高度
resetViewPagerHeight(position);
switch (position) {
case 0:
break;
case 1:
break;
case 2:
break;
}
}
}
public class myAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
resetViewPagerHeight(0);
}
}
}
---- XML佈局檔案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.hellsam.scrollviewwithviewpager.CustomScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="#0000FF" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="很大一塊內容 H:350dp"
android:textColor="#FFFFFF" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="內容1 H:300dp" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="內容2 H:500dp" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="內容3 H:800dp" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.hellsam.scrollviewwithviewpager.CustomScrollView>
</LinearLayout>
相關文章
- 巢狀ScrollView問題解決思路巢狀View
- 【Android ViewPager】解決ViewPager巢狀時在API 13及其以下版本中不能滑動的問題AndroidViewpager巢狀API
- 解決 ScrollView 巢狀 RecyclerView 時,慣性滑動失效的問題View巢狀
- 多層 UIScrollView 巢狀滾動解決方案UIView巢狀
- react native ScrollView巢狀WebView 互動問題React Native巢狀WebView
- 【Android Fragment】解決ViewPager巢狀時Fragment的mUserVisibleHint屬性不同步的問題AndroidFragmentViewpager巢狀
- ScrollView巢狀RecyclerView滑動衝突相關問題View巢狀
- ScrollView巢狀ListView解決辦法以及原理View巢狀
- Android實現雙層ViewPager巢狀AndroidViewpager巢狀
- 從原理上說說ScrollView巢狀ListView的問題View巢狀
- 移動端滾動穿透問題解決方案穿透
- ScrollView巢狀LinearLayout佈局不能撐滿全屏的問題View巢狀
- 移動端滾動穿透問題完美解決方案穿透
- 【前端詞典】滾動穿透問題的解決方案前端穿透
- android viewpager2和scrollerview巢狀百度地圖MapView導致滑動有黑邊或者陰影問題AndroidViewpager巢狀地圖
- 巢狀滾動設計和原始碼分析巢狀原始碼
- Scrollview 和 內部 recycleview 高度固定時巢狀衝突的一種解決方法View巢狀
- Android ScrollView滾動到指定View的位置AndroidView
- Jetpack Compose(8)——巢狀滾動Jetpack巢狀
- 一種巢狀滑動衝突的解決方案巢狀
- ViewPager巢狀fragment簡單使用Viewpager巢狀Fragment
- 一種非巢狀滑動衝突的解決方案巢狀
- 解決viewpager+fragment+tablayout的動態重新整理ViewpagerFragmentTabLayout
- 巢狀滾動效果實現討論巢狀
- 三級 NestedScroll 巢狀滾動實踐巢狀
- 【Android Fragment】解決Fragment多層巢狀時onActivityResult無法正確回撥的問題AndroidFragment巢狀
- 解決Flutter的ListView巢狀ListView滑動衝突以及無限高度問題FlutterView巢狀
- Vue 使用 Devextreme框架,下拉框不會隨頁面的滾動而移動的問題解決VuedevREM框架
- "ScrollView can host only one direct child"問題解決View
- Android:巢狀滑動總結Android巢狀
- 解決小程式遮罩層滾動穿透問題遮罩穿透
- 移動端滾動穿透解決方案穿透
- Android ViewPager Fragments滑動只重新整理當前頁AndroidViewpagerFragment
- 下拉選單框和滾動條
- scrollview 的滑動衝突 viewpager等都適用Viewpager
- 【Android ViewPager】解決ViewPager使用DepthPageTransformer時事件會被下一頁捕獲導致事件錯亂的問題AndroidViewpagerORM事件
- 解決移動裝置上iframe滾動條的問題
- Vuex資料頁面重新整理丟失問題解決方案Vue
- Android巢狀滑動邏輯淺析Android巢狀