Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 對現有的控件進行拓展,以TextView為例

對現有的控件進行拓展,以TextView為例

編輯:關於Android編程

1.自定義控件有一個方法是在原生控件的基礎上進行的拓展,增加新的功能,修改顯示的UI等,一般我們可以子啊onDraw()方法中隊原生的控件進行的拓展。

2.下面以為textvew的背景增加更多的顏色為例:

如何實現:

當我們自定義的view繼承TextView的後,若不重寫onDraw()方法,則不會修改TextView的任何效果。
 @Override
    protected void onDraw(Canvas canvas) {
     super.onDraw(canvas);
      }

程序調用的是super.onDraw(canvas);方法來實現原生控件的功能,但我我們可以在調用super.onDraw(canvas)之前和之後實現自己的邏輯,即在系統繪制文字的前後完成操作。

3.在自定義view的構造方法中完成必要的初始化工作。


    // 創建畫筆
    private Paint paint1;
    private Paint paint2;
    private Paint paint3;
    private Paint paint4;

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

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

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // 初始化工作(創建畫筆)

        paint1 = new Paint();
        paint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
        paint1.setStyle(Paint.Style.FILL);

        paint2 = new Paint();
        paint2.setColor(Color.YELLOW);
        paint2.setStyle(Paint.Style.FILL);

        paint3 = new Paint();
        paint3.setColor(Color.GREEN);
        paint3.setStyle(Paint.Style.FILL);

        paint4 = new Paint();
        paint4.setColor(Color.GRAY);
        paint4.setStyle(Paint.Style.FILL);

    }

4.在onDraw()方法中,在super.onDraw(canvas)前繪制幾個不同大小的矩形,形成重疊的效果。再讓系統調用super.onDraw(canvas)方法完成繪制文字的工作。

 @Override
    protected void onDraw(Canvas canvas) {
        // 繪制文本前的的邏輯
        /**
         * 繪制外層矩形
         * getMeasuredWidth():對View上的內容進行測量後得到的View內容占據的寬度
         * getMeasuredHeight():對View上的內容進行測量後得到的View內容占據的高度
         */
        canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),paint1);
        // 第二層矩形
        canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2);
        // 第三層矩形
        canvas.drawRect(20, 20, getMeasuredWidth() - 20, getMeasuredHeight() - 20, paint3);
        // 第四層矩形
        canvas.drawRect(30, 30, getMeasuredWidth() - 30, getMeasuredHeight() - 30, paint4);
        // save:用來保存Canvas的狀態。save之後,可以調用Canvas的平移、放縮、旋轉、錯切、裁剪等操作
        canvas.save();
        // 繪制文字前平移(100px,30px)。
        canvas.translate(100, 30);
        // 父類繪制文本
        super.onDraw(canvas);
        // 繪制文本之後的邏輯
        // restore:用來恢復Canvas之前保存的狀態。防止save後對Canvas執行的操作對後續的繪制有影響,
        // 也就是防止translate對後來的繪制有影響。
        canvas.restore();

    }

效果圖如下:
矩形多層背景疊加的 效果

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved