当前位置: 代码迷 >> Android >> Android 中自定义View的运用
  详细解决方案

Android 中自定义View的运用

热度:39   发布时间:2016-05-01 15:34:36.0
Android 中自定义View的应用.

大家好我们今天的教程是在Android教程中自定义View的学习,对于初学着来说,他们习惯了Android传统的页面布局方式,如下代码:

?

view plain
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. <TextView????
  8. ????android:layout_width="fill_parent"???
  9. ????android:layout_height="wrap_content"???
  10. ????android:text="@string/hello"??
  11. ????/>??
  12. </LinearLayout>??

?

当然上面的布局方式可以帮助我们完成简单应用的开发了,但是如果你想写一个复杂的应用,这样就有点牵强了,大家不信可以下源码都研究看看,高手写的布局方式,如上面的布局高手通常是这样写的:

?

view plain
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <A>??
  3. ????<B></B>??
  4. </A>??
view plain
  1. 其中A?extends?LinerLayout,?B?extends?TextView.??

?

为了帮助大家更容易理解,我写了一个简单的Demo,具体步骤如下:

?

首先新建一个Android 工程 命名为ViewDemo.

?

然后自定义一个View类,命名为MyView(extends View).代码如下:

?

view plain
  1. package?com.android.tutor;??
  2. import?android.content.Context;??
  3. import?android.graphics.Canvas;??
  4. import?android.graphics.Color;??
  5. import?android.graphics.Paint;??
  6. import?android.graphics.Rect;??
  7. import?android.graphics.Paint.Style;??
  8. import?android.util.AttributeSet;??
  9. import?android.view.View;??
  10. public?class?MyView?extends?View?{??
  11. ????private?Paint?mPaint;??
  12. ????private?Context?mContext;??
  13. ????private?static?final?String?mString?=?"Welcome?to?Mr?Wei's?blog";??
  14. ??????
  15. ????public?MyView(Context?context)?{??
  16. ????????super(context);??
  17. ??????
  18. ????}??
  19. ????public?MyView(Context?context,AttributeSet?attr)??
  20. ????{??
  21. ????????super(context,attr);??
  22. ??????
  23. ????}??
  24. ????@Override??
  25. ????protected?void?onDraw(Canvas?canvas)?{??
  26. ????????//?TODO?Auto-generated?method?stub??
  27. ????????super.onDraw(canvas);??
  28. ??????????
  29. ????????mPaint?=?new?Paint();??
  30. ??????????
  31. ????????//设置画笔颜色??
  32. ????????mPaint.setColor(Color.RED);??
  33. ????????//设置填充??
  34. ????????mPaint.setStyle(Style.FILL);??
  35. ??????????
  36. ????????//画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标??
  37. ????????canvas.drawRect(new?Rect(10,?10,?100,?100),?mPaint);??
  38. ??????????
  39. ????????mPaint.setColor(Color.BLUE);??
  40. ????????//绘制文字??
  41. ????????canvas.drawText(mString,?10,?110,?mPaint);??
  42. ????}??
  43. }??

?

然后将我们自定义的View加入到main.xml布局文件中,代码如下:

?

view plain
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. <TextView????
  8. ????android:layout_width="fill_parent"???
  9. ????android:layout_height="wrap_content"???
  10. ????android:text="@string/hello"??
  11. ????/>??
  12. <com.android.tutor.MyView??
  13. ????android:layout_width="fill_parent"???
  14. ????android:layout_height="fill_parent"???
  15. />??
  16. </LinearLayout>??

最后执行之,效果如下图:

?

?

OK,大功告成,今天就写到这里,开始做饭了,老婆孩子等我做饭了,lol~

  相关解决方案