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
- Android View---自定义View
- Android View---自定义View
- Android 自定义View 之 自定义View属性
- 【自定义View系列】android自定义View概述
- Android 自定义View
- Android 自定义 View
- android自定义View
- Android 中自定义 view
- android 自定义view组件
- Android 自定义 View
- android 自定义view
- Android:如何自定义View
- android 自定义View
- Android自定义View实现
- Android自定义View(一)
- Android自定义View
- android 自定义view
- Android自定义View
- MIP到底能不能提升排名
- 智和网管平台交通行业综合网管解决方案
- cocos2d 怎么实现两个动作执行完之后执行第三个
- 集合框架面试题
- Cocos2d-Js热更新(最完整版本,包括自己做的过程中遇到的坑都在里面)
- Android View---自定义View
- Java 征途:行者的地图
- 【英语】12月英语总结
- java 任务队列
- Canvas的save和restore
- 数据库连接测试
- Android Studio Manifest merger failed with multiple errors, see logs
- usb-descriptor(二)
- System_Date_SimpleDateFormat_Calendar类