首页 > 学院 > 开发设计 > 正文

自定义view加之

2019-11-09 16:25:18
字体:
来源:转载
供稿:网友

首先我们要在values文件夹下创建一个attrs的xml在attrs里面写入自己的自定义属性

<attr name="titleText" format="string" /><attr name="titleTextColor" format="color" /><attr name="titleTextSize" format="dimension" /><declare-styleable name="CustomTitleView">    <attr name="titleText" />    <attr name="titleTextColor" />    <attr name="titleTextSize" /></declare-styleable>然后在布局文件中引用我们的自定义属性

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:custom="http://schemas.android.com/apk/res-auto"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.bawei.lianxi.MainActivity">    <com.szg.lianxi.MyView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        custom:titleText="3712"        custom:titleTextColor="#ff0000"        custom:titleTextSize="40sp"        /></RelativeLayout>新建一个类继承View并重写View的方法

package com.bawei.lianxi;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;/** * Created by 宋泽港 on 2017/2/8. */public class MyView extends View{    /**     * 绘制文本的范围     */    PRivate  Rect mBound;    private  Paint mPaint;    //文本颜色    private  int mTitleTextColor;    //文本大小    private  int mTitleTextSize;    //文本    private  String mTitleText;    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);    //获得我们所定义的自定义属性        mPaint=new Paint();        TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.CustomTitleView,defStyleAttr,0);        int n=a.getIndexCount();        for (int i=0;i<n;i++){            int attr=a.getIndex(i);            switch (attr){                case R.styleable.CustomTitleView_titleText:                    mTitleText=a.getString(attr);                    break;                //设置默认颜色                case R.styleable.CustomTitleView_titleTextColor:                    mTitleTextColor=a.getColor(attr,Color.RED);                    break;                case R.styleable.CustomTitleView_titleTextSize:                    mTitleTextSize=a.getDimensionPixelSize(attr, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,16,getResources().getDisplayMetrics()) );                    break;            }        }        //释放资源        a.recycle();        /**         * 绘制文本的宽和高         */        mPaint.setTextSize(mTitleTextSize);        mBound=new Rect();        mPaint.getTextBounds(mTitleText,0,mTitleText.length(),mBound);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    //画布    @Override    protected void onDraw(Canvas canvas) {        mPaint.setColor(Color.YELLOW);//设置画布的颜色        //绘制的位置        canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint);        mPaint.setColor(mTitleTextColor);        canvas.drawText(mTitleText, getWidth() / 2 - mBound.width() / 2, getHeight() / 2 + mBound.height() / 2, mPaint);        super.onDraw(canvas);    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表