Android学习笔记-自定义View-基础知识

2019-02-20  本文已影响0人  予久i

关于自定义View,说简单有些效果很方便实现,说困难有些效果需要对View的整个原理有深入的研究,而且有时对自定义View这个概念就不是很理解。经过一些网上资料的查找以及对《Android开发艺术探索》《Android进阶之光》等书籍的阅读,整理出部分知识点 简单总结一下自定义View相关知识。

什么是自定义View

我们平常需要一些比较炫酷、特殊的效果是系统中自带的控件无法实现的,这个时候就需要我们去继承View或者ViewGroup重写其中的某些相关方法,自己实现相关效果,也可以直接继承相关控件或者布局扩展其功能来实现我们想要的效果。

自定义View分类

自定义View分类标准不唯一,但是大致上可以分为四类:

自定义View中的重要方法

继承自View

        //得到宽度大小和其测量模式
        widthSize=MeasureSpec.getSize(widthMeasureSpec);
        widthMode=MeasureSpec.getMode(widthMeasureSpec);
        //对View宽高进行修改
        //setMeasuredDimension(widthSize,heightSize);

heightMeasureSpec的含义同上。
在该方法中的到View宽高数据的同时也可以使用setMeasuredDimension(widthSize,heightSize);方法来为View设置宽度和高度大小
关于测量模式:
1.UNSPECIFIED
默认的测量模式,父控件没有给子View任何限制,子View可以设置为任意大小
2.EXACTLY
精确模式,表示父控件已经确切的指定了子View的大小,对应于:直接指定宽高属性值或者match_parent
3.AT_MOST
最大模式,子View大小没有具体限制,子View最大为父View大小,对应于:wrap_content

所以我们可以通过重写相应的方法来控制View绘制的顺序和绘制内容
相关代码

继承自ViewGroup

        //子View个数
        int count=getChildCount();
        //子View对象
        View child=getChildAt(0);

相关参数含义:
changedView是否有新的位置和尺寸即是否改变
left:子View左侧距离父View左侧的距离
top:子View顶部距离父View顶部的距离
right:子View右侧距离父View右侧的距离
bottom:子View底部距离父View底部的距离

绘制自定义View所使用的工具

Paint

画笔,顾名思义 该工具类主要是在图形绘制的过程中像一支笔一样与Canvas以及Path相配合用来辅助图形的绘制。只不过我们可以通过相关的方法来设置这支的颜色,粗细等属性。
示例:

        mPaint=new Paint();
        mPaint.setColor(Color.BLUE);    //画笔颜色
        mPaint.setStyle(Paint.Style.FILL);  //设置画笔模式为填充
        mPaint.setStrokeWidth(10f);     //设置画笔宽度为10px

Canvas

画布,和画笔一样由名字便可得知它的作用,我们绘制图形便是在Canvas上实现,可以与Paint和Path相互配合绘制出各种效果。该工具类为我们提供了:
基本图形
如:圆形、矩形、椭圆、点、线、圆弧等的绘制方法。
画布的相关操作
缩放、位移、旋转、设置显示区域等相关方法的实现。
基本图形绘制-部分相关代码
画布相关操作-部分相关代码

Path

路径,主要用来实现一些比点、线、圆、圆弧等更加复杂的操作。如:心形、正多边形、贝塞尔曲线等。
部分相关代码

如何为自定义View设置自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomView">
        <attr name="custom_view_color" format="color"/>
    </declare-styleable>
</resources>
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //获取自定义属性值
        TypedArray customViewAttrs=context.obtainStyledAttributes(attrs, R.styleable.CustomView);
        int mColor=customViewAttrs.getColor(R.styleable.CustomView_custom_view_color, Color.RED);
    }
<com.example.androidprimarycodedemo.custom_view.CustomView
    android:id="@+id/custom_view"
    app:custom_view_color="@color/colorAccent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

实现自定义View步骤

通过上述一些知识的了解,我们大致可以得到自定义View的大体步骤。
1、选定要继承的View类
分析要实现的效果确定要实现的自定义View类需要继承自ViewViewGroup、特定控件还是特定的布局。
2、确定自定义View大小、位置等所需数据
根据实际情况确实是否需要处理wrap_contentpadding以及通过相关函数的到实际需要的参数等。
3、根据具体情况进行绘制
根据要实现的效果选择相应的PaintPath以及Canvas的一些效果进行自定义View的绘制。

自定义View注意事项

上述 自定义View分类和自定义View注意事项 内容摘抄自《Android开发艺术探索》

上一篇 下一篇

猜你喜欢

热点阅读