Android View---自定义View

来源:互联网 发布:cocos2dx和unity3d 编辑:程序博客网 时间:2024/06/02 12:11

以下是比较重要的回调方法:

    //从XML加载组件后回调    @Override    protected void onFinishInflate() {        super.onFinishInflate();    }    //组件大小改变后回调    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);    }    //回调该方法进行测量    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    //回调该方法确定显示的位置    @Override    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {        super.onLayout(changed, left, top, right, bottom);    }    //监听到触摸事件时的回调    @Override    public boolean onTouchEvent(MotionEvent event) {        return super.onTouchEvent(event);    }


 

自定义一个带边框的TextView

public class CustomTextView extends TextView {    //初始化画笔    Paint mPaint1;    Paint mPaint2;    public CustomTextView(Context context) {        super(context);    }    public CustomTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        mPaint1=new Paint();        mPaint1.setColor(Color.GREEN);        //STROKE 表示只画一条线        //Fill表示填满整个View        mPaint1.setStyle(Paint.Style.STROKE);        mPaint2=new Paint();        mPaint2.setColor(getResources().getColor(android.R.color.holo_blue_light));        mPaint2.setStyle(Paint.Style.FILL_AND_STROKE);        //绘制外层矩形        canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);        //绘制内层矩形        canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);        canvas.save();//保存画布的状态        //绘制文字前平移10个像素        canvas.translate(10,0);        //在回调父类的方法前实现自己的逻辑,对TextView来说就是在绘制文本内容前        super.onDraw(canvas);        //在回调父类的方法前实现自己的逻辑,对TextView来说就是在绘制文本内容后    }}

自定义一个酷炫的TextView

public class CoolTextView extends TextView {    private int mViewWidth;    //初始化画笔    private Paint mPaint;    //渲染器    private LinearGradient mLinearGradient;    //矩阵    private Matrix matrix;    private int mTranslate;    public CoolTextView(Context context) {        super(context);    }    public CoolTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mPaint=new Paint();        if (mViewWidth==0){            mViewWidth=getMeasuredWidth();            if (mViewWidth>0){                //获取当前TextView的画笔                mPaint=getPaint();                //渲染器                mLinearGradient=new LinearGradient(0,0,mViewWidth,0,                        new int[]{Color.BLUE, 0xffffffff, Color.BLUE},                        null, Shader.TileMode.CLAMP);                mPaint.setShader(mLinearGradient);                matrix=new Matrix();            }        }    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if (matrix!=null){            //修改可以改变显示的速度            mTranslate+=mViewWidth/10;            if (mTranslate>1*mViewWidth){                mTranslate=-mViewWidth;            }            matrix.setTranslate(mTranslate,0);            mLinearGradient.setLocalMatrix(matrix);            //每隔100毫秒闪动一下            postInvalidateDelayed(100);        }    }    /*    LinearGradient参数:    float x0: 渐变起始点x坐标    float y0:渐变起始点y坐标    float x1:渐变结束点x坐标    float y1:渐变结束点y坐标    int[] colors:颜色 的int 数组    float[] positions: 相对位置的颜色数组,可为null,  若为null,可为null,颜色沿渐变线均匀分布    Shader.TileMode tile: 渲染器平铺模式*/}



 

1 0
原创粉丝点击