Android自定义View

Android自定义View实现很简单

继承View,重写构造函数、onDraw,(onMeasure)等函数。

如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml。在其中定义你的属性。

在使用到自定义View的xml布局文件中需要加入xmlns:前缀="http://schemas.android.com/apk/res/你的自定义View所在的包路径".

在使用自定义属性的时候,使用前缀:属性名,如my:textColor="#FFFFFFF"。

实例:

自定义View类:

package com.zst.service.component;

import com.example.hello_wangle.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MyTextView extends TextView {
    //不能在布局文件中使用
    public MyTextView(Context context) {
        super(context);
    }
    
    //布局文件中用到此构造函数
    public MyTextView(Context content, AttributeSet attrs){
        super(content, attrs);
        Paint paint = new Paint();
        TypedArray array = content.obtainStyledAttributes(attrs, R.styleable.MyView);
        int color = array.getColor(R.styleable.MyView_textColor, 0xFF00FF00);
        float size = array.getDimension(R.styleable.MyView_textSize, 36);
        paint.setColor(color);
        paint.setTextSize(size);
        Log.i("MyTextView", "color:" + color + "\t, size:" + size);
        
        array.recycle();
    }

    //修改背景颜色
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.drawColor(Color.YELLOW);
    }

}

相应的属性文件attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="textColor" format="color" />
        <attr name="textSize" format="dimension" />
        <attr name="textValue" format="string" />
    </declare-styleable>
</resources>

在布局文件中使用:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:my="http://schemas.android.com/apk/res/com.example.hello_wangle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    
<TextView android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/definedTextView"
         android:text="@string/app_name"/>
<com.zst.service.component.CounterView 
        android:layout_width="100dp"
        android:layout_height="100dp"
        />
    
<com.zst.service.component.MyTextView      
       android:layout_width="fill_parent"  
       android:layout_height="wrap_content"    
       my:textColor="#FFFFFFFF"    
       my:textSize="38sp"  
    />  

    

</LinearLayout> 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。