Android 自定义view TypedArray的使用

经常我们会使用自定义view来满足产品和UI的需求,那么TypedArray会使我们代码更好的扩展,修改也会更容易,不用去繁琐的代码里寻找具体位置。
写了一个简单的demo,首先自定义个view,简单的画了个圆,以圆的颜色为例子引用TypedArray,刚入门的时候可能直接就在代码中给画笔直接set上一个颜色比如 paint.setColor(Color.RED);但是这样做简单的view还好,一旦代码繁琐还得挨个查找对应的paint非常麻烦。下面代码直接使用TypedArray来获取颜色:
首先在values下面新建一个attrs.xml文件,在里面定义自定义view的declare-styleable文件,以颜色为例:format有许多选项截图如下,具体就不多说了;
这里写图片描述

 <declare-styleable name="MyView">
        <attr name="view_color" format="color" />
    </declare-styleable>

下面是自定义view 的代码就是简单的一个圆,重点在获取颜色的地方

package lud.com.testdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by win7 on 2016/10/27.
 */

public class MyView extends View {
    private Paint paint;
    private int color;
    private int width;
    private int height;
    private int radio = 100;

    public MyView(Context context) {
        this(context, null);
    }

    public MyView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView);
        color = typedArray.getColor(R.styleable.MyView_view_color, 0xFF666666);
        initPaint();
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }

    private void initPaint() {
        paint = new Paint();
        paint.setColor(color);
        paint.setAntiAlias(true);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(width / 2, height / 2, radio, paint);
    }


}


使用的自定义view的时候需要在xml中加入下面重点的一句:

 xmlns:myview="http://schemas.android.com/apk/res-auto"

然后在调用刚写的MyView 的时候可以直接设置颜色

myview:view_color="#00ff00"

具体代码如下


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myview="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="lud.com.testdemo.MainActivity">

    <lud.com.testdemo.MyView
        android:id="@+id/my_view"
        android:layout_width="200dp"
        android:layout_height="200dp"
        myview:view_color="#00ff00" />
</RelativeLayout>

最后为MyView color提供的get/set方法是可以在代码中动态设置。
OK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值