Android view高度和滑动事件 实战

1.一个view,我直接new处理,不添加任何处理,我的宽和高是多少

Android 正确获取View的宽和高

 
问题:一个view的宽和高是由什么决定!
从源码可以看出来,子View的测量模式是由自身LayoutParam和父View的MeasureSpec来决定的。
 
Android View 显示在屏幕中需经过 measure、layout(ViewGroup 独有)、draw 三个步骤完成,其中 View 的尺寸测量是三个步骤中最为复杂的一个,理解好 View 的 measure 过程,是理解另外两个流程的基础
 

android中View的GONE和INVISIBLE的原理

Gone:得不到宽和高

INVISIBLE可以的都宽高

 
发现:
viewRoot=View.inflate(context, R.layout.tab_main_group_run, this);
getViews();
setViewsOnClick();
init();

int webViewHeightheight = webView.getHeight();
Log.d("peng", "onLoadFinish_height" + webViewHeightheight+"view height"+viewRoot.getHeight());
int webViewHeightheight = webView.getHeight();
FindViewById的时候控件的宽高还有可能是0.
要在界面渲染完成之后,宽和高才不是0;
 
2019-12-26 11:17:47.584 23631-23631/com.yuedong.sport D/peng: onLoadFinish_height0view height0
2019-12-26 11:17:48.420 23631-23631/com.yuedong.sport E/peng: Tabgroup_onLoadFinish_height930viewRoot height1080
2019-12-26 11:17:48.425 23631-23631/com.yuedong.sport E/peng: Tabgroup_onLoadFinish_height930viewRoot height1080
 
 
自定义控件不错的地方
 
------------------------------------------------------------------------------
事件分发机制
rootView
2个viewGoup
1个webview和一个ViewGroup(包含4个btn)
点击btn的时候,会消费掉事件
问题:viewgroup点击空白也是会有事件的,如果给他添加监听
加入点击空白页面,Viewgroup的子View消费掉。(webview的子空间)
问题:不想让子控件消费怎么做
1.可以自己消费掉,ontouch==true。不再传递了,onclick事件就不会执行
2.可以让另外一个viewgourp自己消费掉。
ontouch==true,自己的onclick不会在执行,但是这个子view还是响应了
原因:因为没有拦截,走了子类的dispathevent方法。子类的dispathevent----ontouch---子类的onclick方法消费了。
所以消费是onclick和ontouch方法,但是onclick方法也是要先调用ontouch---ontouchevnet----onclick。
总结:最后的消费🈯️的时onTouch事件
 
 
 
方案1:
1.在mainActivity里面最底层invisible,然后把事件处理
2.监控每个activity,然后在phonewindow下面添加,也要处理事件 。优点:每个地方都会有
1)。得到application,监控生命周期
2)。在activity添加view的操作
3)。处理事件
 
------------------------
问题:viewgroup的ontouchEvent方法到底有什么用?
 
首页滑动问题
改动一个viewpager不行,得父类和子类都控制
父类不想滑动:
1)。不拦截 2)。onTouchEvent返回false
子类滑动:
1)。用系统的 2.onTouchEvent用系统的 
public class YdViewPager extends ViewPager {

    private boolean isCanScroll = true;

    public YdViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public YdViewPager(Context context) {
        super(context);
    }

    public void setCanScroll(boolean isCanScroll) {
        this.isCanScroll = isCanScroll;
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        if (isCanScroll) {
            return super.onTouchEvent(arg0);
        } else {
            return false;
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        if (isCanScroll) {
            return super.onInterceptTouchEvent(arg0);
        } else {
            return false;
        }
    }

    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, smoothScroll);
    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }

 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值