Android View的 滑动冲突及工作流程

26 篇文章 0 订阅

View的滑动冲突

一简单场景下(如:水平滑动里面嵌套一层垂直滑动)
解决办法很多,这里记一个方法。通过水平滑动的距离dx与垂直滑动的距离dy的大小来判断是水平还是垂直滑动。通常有外部拦截跟内部拦截,外部拦截即重写父容器的onInterceptTouchEvent,而内部拦截即重写子元素的dispatchTouchEvent,并根据具体情况将逻辑返回给父容器的onInterceptTouchEvent.因外部拦截法较内部拦截法更为简单,所以推荐使用外部拦截法解决滑动冲突。

View的工作流程

1.Measure,layout,draw。Measure确定测量的宽高,layout确定view的最终宽高跟四个顶点,draw将view绘制到屏幕。其中view的measure方法是final方法,子类不可重写,而viewgroup的measure可以重写。
Margin属性是父容器控制,而padding属性自定义view自己控制,所以设置前padding属性需重写。步骤如下:
在onDraw方法中
int paddingLeft=getPaddingLeft();
int paddingRight=getPaddingRight();
int paddingTop=getPaddingTop();
int paddingBottom=getPaddingBottom();


使用前将padding值添加到自定义view中即可。
2.为自定义view添加自定义属性步骤:
2.1 在values目录下创建xml文件 如attrs.xml
2.2 
<?xml version="1.0" enco ding="utf-8"?>
<resources>
    <declare-styleable name="circleview">
        <attr name="circle_color" format="color"></attr>
    </declare-styleable>
</resources>


2.3在自定义view的构造方法中添加
TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.circleview);
mColor=array.getColor(R.styleable.circleview_circle_color, Color.RED);
array.recycle();


2.4在xml中应用
必须先引入 xmlns:app=http://schemas.android.com/apk/res-auto
<com.example.androidstepdemo.view.CircleView
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:background="#000000"
        android:padding="20dp"
        app:circle_color="#f2f2f2"
     />


其中 app可以换成用户自己定义的变量名
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值