首先我們要在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); }}
新聞熱點
疑難解答