频道栏目
首页 > 资讯 > Android > 正文

自定义View

17-08-15        来源:[db:作者]  
收藏   我要投稿

View概念

view表示屏幕上的一块矩形区域

View创建

注:以下过程是按顺序执行的

1.创建过程

public View(Context context)
 {
     //java创建View调用
     super(context);
  }
public View(Context context ,AttributeSet
 attrs){
     //xml中配置调用
        super(context, attrs);
    }

2.布局过程

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.e("asdf",widthMeasureSpec+"");
        Log.e("asdf",heightMeasureSpec+"");
        Log.e("asdf",getWidth()+"");
        Log.e("asdf",getHeight()+"");
/**
 E/asdf: 1073742544
 E/asdf: 1073743066
 E/asdf: 0
 E/asdf: 0
 E/asdf: 1073742544
 E/asdf: 1073743066
 E/asdf: 720
 E/asdf: 1242
 */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.e("as",w+"");
        Log.e("as",h+"");
        Log.e("as",oldh+"");
        Log.e("as",oldw+"");
    }
/**
E/as: 720
E/as: 1242
E/as: 0
E/as: 0
*/
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        Log.e("asd",changed+"");
        Log.e("asd",top+"");
        Log.e("asd",left+"");
        Log.e("asd",right+"");
        Log.e("asd",bottom+"");
    }
/**
E/asd: true
E/asd: 0
E/asd: 0
E/as: 720
E/as: 1242
E/asd: false
E/asd: 0
E/asd: 0
E/as: 720
E/as: 1242
*/

3.绘制过程
onDraw方法(canvas画布类、paint画笔类)

//Paint画笔类
Paint paint = new Paint();
paint.setAntiAlias(true);//防抖动
paint.setDither(true);//抗锯齿
paint.setARGB(int,int,int,int);//设置带透明度的颜色
paint.setStrokeWidth(10);//设置笔的宽度
paint.setStyle(Paint.Style.STROKE);//空心,实心,实心带边框
paint.setShader(new LinearGradient());//设置线性渐变

//canvas可以绘制的内容:
1. 几何图形:矩形、圆、圆角矩形、线、弧线
canvas.drawLine(300, 300, 350, 350, paint);//两点确定一条直线
canvas.drawCircle(350, 450, 15, paint);//圆心、半径
canvas.drawRect(new RectF(300, 520, 500, 720), paint);//两点确定一个矩形
canvas.drawRoundRect(new RectF(240, 520, 270, 650), 20, 20, paint);//圆角矩形,两点、角度坐标
canvas.drawArc(new RectF(300, 400, 500, 600), 0, -180, true, paint);//画弧,三点钟方向为0°,ture表示是否显示半径
2. 文字
paint.setTextAlign(Paint.Align.CENTER);//文本位置居中
canvas.drawText("Hello World", int,int, paint);//文本内容,从哪一点开始写,默认往右偏
3. 路径(Path类)
Path path = new Path();
path.moveTo(200,500);//起点坐标
path.lineTo(300,600);//终点坐标
path.quadTo(0,0,5,5);//从哪里到哪里画一条直线
path.close();//闭合路径,用于填充颜色
Path类包含一组添加矢量路径的方法add();
4. 图片:Bitmap位图类

4.事件流程

onTouchEvent(MotionEvent)

定制View

//必须继承View类
相关TAG标签
上一篇:Kotlin:基本语法篇
下一篇:最简单实用微信公众号永久获取accesstoken
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站