美文网首页
自定义View之View篇(二)-自定义View基础

自定义View之View篇(二)-自定义View基础

作者: Active_Loser | 来源:发表于2018-10-15 23:01 被阅读0次

一、简介

自定义View通常分为2类:自定义View和自定义ViewGroup

1、构造函数

为什么说到构造函数,因为不同的需求下我们所需要的构造函数是不同的:

public class CustomView extends View {

    /**
     * 当我们Java代码里面new的时候,会调用当前构造函数
     */
    public CustomView(Context context) {
        super(context);
    }

    /**
     * 当我们在Layout中使用View的时候,会调用当前构造函数
     *
     * @param attrs XML属性(当从XML inflate的时候)
     */
    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 当我们在Layout中使用View且使用Style属性的时候,会调用当前构造函数
     *
     * @param defStyleAttr 应用到View的默认风格(定义在主题中)
     */
    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)      {
        super(context, attrs, defStyleAttr);
     }
}

2、坐标

Android坐标系与我们常见数据中的左边系不一样,即左正下正,如图下所示:


获取View位置

//获取View坐标
getLeft(); getTop();getBottom();getRight();

//onTouch中 触摸位置相对于在组件坐标系的坐标
 event.getX();    event.getY();

//onTouch中 触摸位置相对于屏幕默认坐标系的坐标
 event.getRawX();   event.getRawY();

3、自定义属性Attr

在自定义View时,我们经常使attr,如我们常常使用的android:layout_xxx属性,就是定义attr在布局中使用的。自定义Attr流程如下:

  1. res/values目录下新建一个attrs.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="custom">
            <attr name="title" format="string"/>
            <attr name="size" format="integer"/>
        </declare-styleable>
    </resources>
    

    format表示了Attr的类型:reference:引用某一资源ID;fraction:百分数;flag:标记位,各个取值可用“|”连接;其他根据意思就可以理解了

  2. 使用自定义属性
    加入命名空间xmlns:你自己定义的名称="http://schemas.android.com/apk/res/你程序的package包名",然后在布局中使用

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:custom="http://schemas.android.com/apk/res/com.example.active.loser.views   .CustomView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
       <com.example.active.loser.views.CustomView
           custom:title="cuson_title"
           custom:size="10"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
    </RelativeLayout>
    
  3. 获取定义的Attrs的属性值

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
     super(context, attrs, defStyleAttr);
        //获取配置属性
     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.custom,            defStyleAttr, defStyleAttr);
     String title = a.getString(R.styleable.custom_title);
        int size = a.getInteger(R.styleable.custom_size, 20);
        //回收资源
        a.recycle();
    }
    

相关文章

网友评论

      本文标题:自定义View之View篇(二)-自定义View基础

      本文链接:https://www.haomeiwen.com/subject/akaqzftx.html