1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 多重嵌套Viewpage 重写Viewpage更新高度

多重嵌套Viewpage 重写Viewpage更新高度

时间:2020-09-21 18:49:16

相关推荐

多重嵌套Viewpage 重写Viewpage更新高度

添加新数据会使viewpage预加载的长度一样,当前页面数据正常添加,但是预加载的其他页面数据未更新会产生空白,如果滑动刷新又会导致卡顿推荐以下的方法,重写viewpage,然后在滑动的时候重新计算高度就行了

import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.LinearLayout;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.viewpager.widget.ViewPager;/*** Created by ZhengYu on /8/23.*/public class PersonalViewpager extends ViewPager {private int current;private int height = 0;private boolean scrollble = true;public PersonalViewpager(@NonNull Context context) {super(context);}public PersonalViewpager(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (getChildCount() > current) {View child = getChildAt(current);child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));int measureHeight = child.getMeasuredHeight();height = measureHeight;}heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}public void resetHeight(int current) {this.current = current;if (getChildCount() > current) {LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();if (layoutParams == null) {layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height);} else {layoutParams.height = height;}setLayoutParams(layoutParams);}}@Overridepublic boolean onTouchEvent(MotionEvent ev){if (!scrollble){return true;}return super.onTouchEvent(ev); }public boolean isScrollble(){return scrollble;}public void setScrollble(boolean scrollble){this.scrollble=scrollble;}}/** 更新高度*/ viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {viewPager.resetHeight(position);}@Overridepublic void onPageScrollStateChanged(int state) {}});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。