自定義控件之--繼承控件(圓形TextView)


師從郭大,自學於心,繼承控件無疑就是繼承自現有控件,保持繼承的控件的屬性並進行必要的擴展。
 
比如下面這個自定義控件,它就保持了TextView的屬性,並對TextView的外觀進行必要的修改該來適應自己的項目,主要實現的是一個圓形的TextView的功能。
 
三個構造方法:
onMesure(): onMeasure()方法顧名思義就是用於測量視圖的大小的, 確定視圖的寬度和高度的規格和大小 ;
draw():視圖繪制, canvas.drawCircle(getWidth()/2, getHeight()/2,Math.max(getWidth(), getHeight())/2, mBgPaint); 繪制圓形
 
給Canvas加上抗鋸齒標志:
PaintFlagsDrawFilter pfd =newPaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
canvas.setDrawFilter(pfd);
 
繪制圓形的TextView:
canvas.drawCircle(getWidth()/2, getHeight()/2,Math.max(getWidth(), getHeight())/2, mBgPaint);
 
設置回調方法,然后控制組件的內容和背景:
 
setBackgroundColor
setNotifiText
  1.  1 package com.example.circletextview;
     2 import android.content.Context;
     3 import android.graphics.Canvas;
     4 import android.graphics.Color;
     5 import android.graphics.Paint;
     6 import android.graphics.PaintFlagsDrawFilter;
     7 import android.util.AttributeSet;
     8 import android.widget.TextView;
     9 public class CircleView extends TextView {
    10     private Paint mBgPaint = new Paint();
    11     PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
    12     public CircleView(Context context, AttributeSet attrs, int defStyle) {
    13         super(context, attrs, defStyle);
    14     }
    15     public CircleView(Context context, AttributeSet attrs) {
    16         super(context, attrs);
    17         mBgPaint.setColor(Color.WHITE);
    18         mBgPaint.setAntiAlias(true);
    19     }
    20     public CircleView(Context context) {
    21         super(context);
    22         mBgPaint.setColor(Color.WHITE);
    23         mBgPaint.setAntiAlias(true);
    24     }
    25     @Override
    26     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    27         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    28         int measuredWidth = getMeasuredWidth();
    29         int measuredHeight = getMeasuredHeight();
    30         int max = Math.max(measuredWidth, measuredHeight);
    31         setMeasuredDimension(max, max);
    32     }
    33     @Override
    34     public void setBackgroundColor(int color) {
    35         mBgPaint.setColor(color);
    36     }
    37     /**
    38      * 設置通知個數顯示
    39      * @param text
    40      */
    41     public void setNotifiText(int text){
    42         setText(text+"");
    43     }
    44     @Override
    45     public void draw(Canvas canvas) {
    46         canvas.setDrawFilter(pfd);//給Canvas加上抗鋸齒標志
    47         canvas.drawCircle(getWidth()/2, getHeight()/2, Math.max(getWidth(), getHeight())/2, mBgPaint);
    48         super.draw(canvas);
    49     }
    50 }
github:
https://github.com/soyoungboy/MyCircleTextView




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM