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

来源:互联网 发布:回忆杀网络用语 编辑:程序博客网 时间:2024/05/29 18:45

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
原创粉丝点击