Android中如何使用自定义view 自定义控件属性及动态自定义控件

如何 自定义View   
好处:特殊的效果,满足个性的需求 
流程:
1) 创建一个类,继承View或它的子类
2) 添加构造方法
   一个参数:在代码中创建对象
   两个参数:在布局文件中使用   
3) 重写onDraw()方法           一个矩形区域,画布Canvas  画笔Paint
   设置画笔属性
        // 创建画笔
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setTextSize(30); 
4) 使用canvas绘制
   例如:canvas.rotate(90);
         canvas.drawText("VerticalTextView", 20, 0, paint); 

 

如何使用自定义控件 
在布局文件中拖拽自定义控件 

 

 

自定义控件属性的步骤:
1) 在values目录中创建attrs.xml
   (从ApiDemos中拷贝)
2) 定义属性 
   例如:   
    <declare-styleable name="VerticalTextView">
        <attr name="content" format="string" />
3) 在自定义控件代码中读取布局中配置的属性,进行设置
   参考ApiDemos中的LabelView   

 

使用自定义属性:
1) 在布局文件中添加自定义控件的命名空间
   例如: xmlns:yuchen="http://schemas.android.com/apk/res/org.yuchen.templete"  
2) 配置属性,例如:yuchen:content="sdf"

动态:
1) 修改重新绘制的内容
2) 触发系统重新调用onDraw()方法
   调用invalidate()方法
   例如:


01. // 动态自定义控件
02. postDelayed(new Runnable()
03. {
04. @Override
05. public void run()
06. {
07. text = new Date().toLocaleString();
08. invalidate();
09. postDelayed(this, 1000);
10. }
11. }, 1000);

运行效果如下:(动态生成)

 

代码如下:


01. public class Mytextview extends View
02. {
03. String content = "abc";
04. private int color;
05. private float dimension;
06. private Paint paint;
07. public Mytextview(Context context)
08. {//一个参数的构造方法,适用在,代码中new自定义的view类
09. super(context);
10. }
11. public Mytextview(Context context, AttributeSet attrs)
12. {//两个参数的构造方法,适用在,使用布局xml里拖拉自定义的控件方法
13. //
14. super(context, attrs);
15. Log.e("Mytextview", "Mytextview(2)");
16. //      读取控件里使用的属性attrs
17. TypedArray a = context.obtainStyledAttributes(attrs,
18. R.styleable.mytextview);
19. CharSequence s = a.getString(R.styleable.mytextview_text);//静态读取自定义控件的文字内容
20. color = a.getColor(R.styleable.mytextview_textColor, Color.BLACK);
21. dimension = a.getDimension(R.styleable.mytextview_textSize, 20);
22. //        if (s != null) {
23. //            content = s.toString();
24. //        }
25. postDelayed(new Runnable()
26. {
27. //          动态获得自定义控件的文字内容
28. @Override
29. public void run()
30. {
31. content = new Date().toLocaleString();
32. invalidate();//调用ondraw()方法,重绘
33. postDelayed(this, 1000);
34. }
35. }, 1000);
36. }
37. @Override
38. protected void onDraw(Canvas canvas)
39. { //canvas画布
40. super.onDraw(canvas);
41. Log.e("onDraw", "onDraw");
42. paint = new Paint();
43. paint.setColor(color);
44. paint.setTextSize(dimension);
45. paint.setAntiAlias(true);//消除锯齿
46. canvas.rotate(90);//画布旋转90度
47. canvas.drawText(content , 60, -60, paint);//画文本
48. }
49. }
50. public class Mytextview extends View
51. {
52. String content = "abc";
53. private int color;
54. private float dimension;
55. private Paint paint;
56. public Mytextview(Context context)
57. {//一个参数的构造方法,适用在,代码中new自定义的view类
58. super(context);
59. }
60. public Mytextview(Context context, AttributeSet attrs)
61. {//两个参数的构造方法,适用在,使用布局xml里拖拉自定义的控件方法
62. //
63. super(context, attrs);
64. Log.e("Mytextview", "Mytextview(2)");
65. //      读取控件里使用的属性attrs
66. TypedArray a = context.obtainStyledAttributes(attrs,
67. R.styleable.mytextview);
68. CharSequence s = a.getString(R.styleable.mytextview_text);//静态读取自定义控件的文字内容
69. color = a.getColor(R.styleable.mytextview_textColor, Color.BLACK);
70. dimension = a.getDimension(R.styleable.mytextview_textSize, 20);
71. //        if (s != null) {
72. //            content = s.toString();
73. //        }
74. postDelayed(new Runnable()
75. {
76. //          动态获得自定义控件的文字内容
77. @Override
78. public void run()
79. {
80. content = new Date().toLocaleString();
81. invalidate();//调用ondraw()方法,重绘
82. postDelayed(this, 1000);
83. }
84. }, 1000);
85. }
86. @Override
87. protected void onDraw(Canvas canvas)
88. {
89. super.onDraw(canvas);
90. paint = new Paint();
91. paint.setColor(color);
92. paint.setTextSize(dimension);
93. paint.setAntiAlias(true);//消除锯齿
94. canvas.rotate(90);//画布旋转90度
95. canvas.drawText(content , 60, -60, paint);//画文本
96. }
97. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android自定义View是指基于Android原生控件的一种扩展,可以根据自己的需求和设计规范来创建更加个性化和独特的控件。而歌词控件是一种针对音乐播放器或者视频播放器等应用场景的需求,用于显示音乐或者视频的歌词的控件Android自定义View歌词控件的实现思路如下: 1. 首先需要自定义一个View,并继承自View或者其子类,如TextView。 2. 在自定义View重写onDraw方法,在其实现绘制歌词的逻辑。 3. 在onDraw方法使用Canvas对象进行绘制,可以使用drawText方法绘制歌词文本,也可以使用drawBitmap方法绘制图片背景等。 4. 可以通过自定义属性,如字体大小、字体颜色、歌词滚动速度等,来对歌词控件进行配置。 5. 如果需要实现歌词的滚动效果,可以使用ValueAnimator或者Scroller来实现歌词的平滑滚动。 6. 如果需要实现点击歌词跳转播放进度的功能,可以通过添加点击事件监听器,在触摸事件判断点击位置对应的歌词行,并根据歌词的时间戳跳转到指定的播放进度。 总结来说,Android自定义View歌词控件的实现需要重写onDraw方法进行绘制,可以通过Canvas对象进行绘制文本或者图像,通过自定义属性进行配置,使用动画或者滚动实现歌词的平滑滚动,通过监听触摸事件实现点击歌词跳转播放进度的功能。通过以上步骤,我们可以创建一个个性化的歌词控件,满足不同应用场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值