自定义控件(一)

对原控件进行扩展


一、

package com.cusview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

    private Paint paint1, paint2;

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        paint1 = new Paint();
        paint2 = new Paint();
        paint1.setColor(Color.RED);
        paint2.setColor(Color.GREEN);
    }

    /**
     * 重写ondDraw()方法改变View的外观
     */
    @Override
    protected void onDraw(Canvas canvas) {
        // 绘制文本前改变绘制行为

        // 绘制外层图形
        canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint1);
        // 绘制内层
        canvas.drawRect(10, 10, getMeasuredWidth() - 10,
                getMeasuredHeight() - 10, paint2);
        canvas.save();
        canvas.translate(110, 2);// 文字偏移设置,就是移动位置
        super.onDraw(canvas);// 调用父类构造方法,绘制文本
        // 绘制文本后改变绘制行为
        canvas.restore();
    }
    /**
     * View的大小改变时调用
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        // TODO Auto-generated method stub
        super.onSizeChanged(w, h, oldw, oldh);
    }

}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >

    <com.cusview.MyTextView 
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="安卓"
        android:textSize="32sp"
        />
</RelativeLayout>

效果图:
这里写图片描述

二、

package com.cusview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

//  private Paint paint1, paint2;

       private LinearGradient gradient;
       private Matrix matrix;
       private Paint paint;
       private int mViewWidth=0;
       private int mTraslate=0;
    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        if(matrix!=null){
            mTraslate+=mViewWidth/5;    
            if(mTraslate>2*mViewWidth){
                mTraslate=-mViewWidth;
            }
            matrix.setTranslate(mTraslate, 0);
            gradient.setLocalMatrix(matrix);
            postInvalidateDelayed(500);
        }
    }


    /**
     * View的大小改变时调用
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        // TODO Auto-generated method stub
        super.onSizeChanged(w, h, oldw, oldh);
        if(mViewWidth==0){
            mViewWidth=getMeasuredWidth();
            if(mViewWidth>0){
                paint=getPaint();
                gradient=new LinearGradient(0, 0, mViewWidth, 0, new int[]{Color.BLUE, 0xabcccc,Color.RED},null, 
                        Shader.TileMode.CLAMP);
                paint.setShader(gradient);
            }
        }
    }

}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >

    <com.cusview.MyTextView 
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="安卓"
        android:textSize="32sp"
        />
</RelativeLayout>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值