设为首页 加入收藏

TOP

自定义View类(一)
2019-09-01 23:14:06 】 浏览:87
Tags:定义 View

一、如何创建自定义的View类

   ①、创建一个继承android.view.View类的Java类,并且重写构造方法(至少需要重写一个构造方法)

   ②、根据需要重写其他方法

   ③、在项目的活动中,创建并实例化自定义的View类,然后将其添加到布局管理器中(添加到布局管理器的方法:布局管理器.addView())

二、View类常用的函数

   ①、onDraw() 当组件将要绘制它的内容时

   ②、onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后调用的方法

   ③、onMeasure() 检测View组件及其子组件的大小

   ④、onLayout() 当该组件需要分配其子组件的位置、大小时

   ⑤、onSizeChange() 当该组件的大小被改变时

   ⑥、onKeyDown 当按下某个键盘时

   ⑦、onKeyUp 当松开某个键盘时

   ⑧、onTrackballEvent 当发生轨迹球事件时

   ⑨、onTouchEvent 当发生触屏事件时

   ⑩、onWindowFocusChanged(boolean) 当该组件得到、失去焦点时

   11)、onAtrrachedToWindow() 当把该组件放入到某个窗口时

   12)、onDetachedFromWindow() 当把该组件从某个窗口上分离时触发的方法

   13)、onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发的方法

三、将自定义的Viewl类添加到相对应的窗口

   方式一:

    布局管理器  变量名 = (布局管理器)findViewById(R.id.ID)

    类  变量名A = new 类(this)

    布局管理器.addView(变量名A)

   方式二:

   在xml布局中添加

四、Android自定义View的构造函数

    有两种方式自定义构造函数

  方式一:

   每个构造函数分别调用基类的构造函数,再调用一个公共的初始化方法做额外的初始化工作

 1 public class MyView extends ListView {
 2     public MyView(Context context) {
 3         super(context);
 4         sharedConstructor();
 5     }
 6 
 7     public MyView(Context context, AttributeSet attrs) {
 8         super(context, attrs);
 9         sharedConstructor();
10     }
11 
12     public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
13         super(context, attrs, defStyleAttr);
14         sharedConstructor();
15     }
16     
17     private void sharedConstructor() {
18         // Do some initialize work.
19     }
20 }

   方式二:

   级联式调用,每一个构造函数调用比它多一个参数的构造函数,最后一个构造函数调用基类的构造函数,最后在做一些额外的初始化工作

  

 1 public class MyView extends ListView {
 2     public MyView(Context context) {
 3         this(context, null);
 4     }
 5 
 6     public MyView(Context context, AttributeSet attrs) {
 7         this(context, attrs, 0);
 8     }
 9 
10     public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
11         super(context, attrs, defStyleAttr);
12         
13         // Other initialize work.
14     }
15 }

注:

  建议采用第一种方式。因为第二种方法在某些情况下会出现问题,比如你自定义的View继承自ListView或TextView时,ListView或TextView内部的构造函数有一个默认的defStyle, 第二种方法调用时defStyle会传入0,这将覆盖基类中默认的defStyle,进而导致一系列问题。

五、Canvas 和 Paint

    Canvas表示画布,Paint代表画笔

  1)、Paint的属性

       // 设置字体颜色  
        paint.setColor(Color.RED);  
        // 防锯齿  
        paint.setAntiAlias(true);  
      
        //设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果   
        paint.setColorFilter(ColorFilter);   
           
        //如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加      //快显示   
        //速度,本设置项依赖于dither和xfermode的设置   
        paint.setFilterBitmap(true);   
          
        //当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度   
        paint.setStrokeWidth(10f);   
        //设置绘制路径的效果,如点画线等   
        paint.setPathEffect(PathEffect);   
          
        //设置图像效果,使用Shader可以绘制出各种渐变效果   
        paint.setShader(Shader);   
          
        //设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等   
        paint.setMaskFilter(MaskFilter);   
           
        //在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色   
        paint.setShadowLayer(float radius ,float dx,float dy,int color);   
           
        //设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE   
        paint.setStyle(Paint.Style);   
           
        //当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,圆形样
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android Studio Git 分支使用实践 下一篇【最新】Android使用jenkins全自..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目