Android 自定义View

简介:

Android 自定义View为MyCustomView。在MyCustomView画了一个Rect,

颜色为Green,和一个为红色的文字。

public  class  MyCustomView extends  View{
 
      private  Paint mPaint; 
      private  Context mContext; 
      private  static  final  String mString = "Hello world!"
 
     
     public  MyCustomView(Context context) {
         super (context);
         // TODO Auto-generated constructor stub
     }
     
     public  MyCustomView(Context context, AttributeSet attr) {
         super (context,attr);
         // TODO Auto-generated constructor stub
         
     }
     
      @Override 
      protected  void  onDraw(Canvas canvas) { 
          // TODO Auto-generated method stub 
          super .onDraw(canvas); 
            
          mPaint = new  Paint(); 
          
          mPaint.setColor(Color.GREEN);
          mPaint.setStyle(Style.FILL);
          
          canvas.drawRect( new  Rect( 10 , 10 , 300 , 500 ), mPaint); 
            
          mPaint.setColor(Color.RED); 
          canvas.drawText(mString, 50 , 550 , mPaint);
      }
}

 将自定义的View添加到activity_main的Layout中

<?xml version= "1.0"  encoding= "utf-8" ?> 
     <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" 
         android:orientation= "vertical" 
         android:layout_width= "fill_parent" 
         android:layout_height= "fill_parent" 
        
     <TextView   
         android:layout_width= "fill_parent"  
         android:layout_height= "wrap_content"  
         android:text= "@string/hello_world" 
         /> 
    <com.example.customview.MyCustomView
        android:layout_width= "fill_parent"
        android:layout_height= "fill_parent"
        />
     </LinearLayout>

 参考

其中Layout中的<com.example.customview.MyCustomView />就是对该自定义控件的使用。


二、为MyCustomView添加自定义属性

在value文件夹下建attrs.xml文件。 定义了两个属性,分别为文本颜色和文本大小。

1
2
3
4
5
6
7
<?xml version= "1.0"  encoding= "utf-8" ?>
<resources>
     <declare-styleable name= "MyView" >
         <attr name= "textColor"  format= "color"  />
         <attr name= "textSize"  format= "dimension"  />
     </declare-styleable>
</resources>

MyCustomView类更改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public  class  MyCustomView  extends  View {
 
     private  Paint mPaint;
     private  Context mContext;
     private  static  final  String mString =  "Hello world!" ;
     public  MyCustomView(Context context) {
         super (context);
         mPaint =  new  Paint();
     }
 
 
     public  MyCustomView(Context context, AttributeSet attr) {
         super (context, attr);
         mPaint =  new  Paint();
         TypedArray array = context.obtainStyledAttributes(attr, R.styleable.MyView);
         int  textColor = array.getColor(R.styleable.MyView_textColor,  0XFFFFFFFF );
         float  textSize = array.getDimension(R.styleable.MyView_textSize,  30 );
         mPaint.setColor(textColor);
         mPaint.setTextSize(textSize);
         
         array.recycle();  //TypedArray通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!
         
     }
 
     @Override
     protected  void  onDraw(Canvas canvas) {
 
         // TODO Auto-generated method stub
 
         super .onDraw(canvas);
         mPaint.setStyle(Style.FILL);
         canvas.drawRect( new  Rect( 10 10 300 500 ), mPaint);
         mPaint.setColor(Color.RED);
         canvas.drawText(mString,  50 550 , mPaint);
     }
 
}

Layout更改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
     xmlns:test= "http://schemas.android.com/apk/res/com.example.customviewdemo"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     tools:context= ".MainActivity"  >
 
     <com.example.customviewdemo.MyCustomView
         android:layout_width= "fill_parent"
         android:layout_height= "fill_parent"
         test:textColor= "#00ff00"
         test:textSize= "20sp"  />
 
</RelativeLayout>

  注意:1. xmlns:test=http://schemas.android.com/apk/res/com.example.customviewdemo  test是自定义的,名字随便取。com.example.customviewdemo 是包名。

     2. test:textColor="#00ff00" test:textSize="20sp" 这两个就是要调用的自定义属性。

  效果如下图:

  




本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/18/2958109.html,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
Android开发 UED 计算机视觉
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
本文介绍了一款受游戏“金铲铲之战”启发的Android自定义View——线条等待动画的实现过程。通过将布局分为10份,利用`onSizeChanged`测量最小长度,并借助画笔绘制动态线条,实现渐变伸缩效果。动画逻辑通过四个变量控制线条的增长与回退,最终形成流畅的等待动画。代码中详细展示了画笔初始化、线条绘制及动画更新的核心步骤,并提供完整源码供参考。此动画适用于加载场景,提升用户体验。
406 5
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
|
4月前
|
Android开发
Android自定义view之利用PathEffect实现动态效果
本文介绍如何在Android自定义View中利用`PathEffect`实现动态效果。通过改变偏移量,结合`PathEffect`的子类(如`CornerPathEffect`、`DashPathEffect`、`PathDashPathEffect`等)实现路径绘制的动态变化。文章详细解析了各子类的功能与参数,并通过案例代码展示了如何使用`ComposePathEffect`组合效果,以及通过修改偏移量实现动画。最终效果为一个菱形图案沿路径运动,源码附于文末供参考。
|
4月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
208 65
Android自定义view之网易云推荐歌单界面
|
4月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
506 84
|
4月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
102 3
|
4月前
|
Android开发 开发者
Android自定义view之围棋动画(化繁为简)
本文介绍了Android自定义View的动画实现,通过两个案例拓展动态效果。第一个案例基于`drawArc`方法实现单次动画,借助布尔值控制动画流程。第二个案例以围棋动画为例,从简单的小球直线运动到双向变速运动,最终实现循环动画效果。代码结构清晰,逻辑简明,展示了如何化繁为简实现复杂动画,帮助读者拓展动态效果设计思路。文末提供完整源码,适合初学者和进阶开发者学习参考。
Android自定义view之围棋动画(化繁为简)
|
4月前
|
Java Android开发 开发者
Android自定义view之围棋动画
本文详细介绍了在Android中自定义View实现围棋动画的过程。从测量宽高、绘制棋盘背景,到创建固定棋子及动态棋子,最后通过属性动画实现棋子的移动效果。文章还讲解了如何通过自定义属性调整棋子和棋盘的颜色及动画时长,并优化视觉效果,如添加渐变色让白子更明显。最终效果既可作为围棋动画展示,也可用作加载等待动画。代码完整,适合进阶开发者学习参考。
|
11月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
11月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
100 2
|
11月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
249 3