View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中往往需要自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。
为了实现自定义View,需要创建一个新的类,然后重写onDraw方法,在此需要注意,新创建的类MyView要继承View基类,同时还要加入有参数的两个构造方法MyView(Context context)和MyView(Contextcontext,AttributeSet attr),否则编译运行无法通过。
在onDraw方法中,初始化了一个画笔对象myPaint,设置画笔颜色,还有文字大小,填充等属性。再利用本方法传入的参数canvas画布完成一幅条形统计图的绘制。具体代码如下:
-
packagecom.viewTest;
-
importandroid.content.Context;
-
importandroid.graphics.Canvas;
-
importandroid.graphics.Color;
-
importandroid.graphics.Paint;
-
importandroid.graphics.Rect;
-
importandroid.graphics.Paint.Style;
-
importandroid.util.AttributeSet;
-
importandroid.view.View;
-
publicclassMyViewextendsView{
-
publicMyView(Contextcontext){
-
super(context);
- }
-
publicMyView(Contextcontext,AttributeSetattr){
-
super(context,attr);
- }
-
privatePaintmyPaint;
-
privatestaticfinalStringmyString1="2006-2011上半年中国移动互联网行业各年度投资情况";
-
privatestaticfinalStringmyString2="来源:清科研究中心2011.08";
- @Override
-
protectedvoidonDraw(Canvascanvas){
-
super.onDraw(canvas);
- myPaint=newPaint();
- myPaint.setColor(Color.BLACK);
- myPaint.setTextSize(18);
- canvas.drawText(myString1,20,20,myPaint);
- canvas.drawLine(50,100,50,500,myPaint);
- canvas.drawLine(50,500,400,500,myPaint);
-
int[]array1=newint[]{0,50,100,150,200,250,300,350};
- myPaint.setTextSize(10);
- canvas.drawText("单位:百万美元",20,90,myPaint);
-
for(inti=0;i<array1.length;i++){
- canvas.drawLine(50,500-array1[i],54,500-array1[i],myPaint);
- canvas.drawText(array1[i]+"",20,500-array1[i],myPaint);
- }
- String[]array2=newString[]{"2008年","2009年","2010年","2011上半年"};
-
for(inti=0;i<array2.length;i++){
- canvas.drawText(array2[i],array1[i]+80,520,myPaint);
- }
- myPaint.setColor(Color.BLUE);
- myPaint.setStyle(Style.FILL);
- canvas.drawRect(newRect(90,500-56,110,500),myPaint);
- canvas.drawRect(newRect(140,500-98,160,500),myPaint);
- canvas.drawRect(newRect(190,500-207,210,500),myPaint);
- canvas.drawRect(newRect(240,500-318,260,500),myPaint);
- myPaint.setColor(Color.BLACK);
- canvas.drawText("56.32",88,500-58,myPaint);
- canvas.drawText("98.00",138,500-100,myPaint);
- canvas.drawText("207.65",188,500-209,myPaint);
- canvas.drawText("318.30",238,500-320,myPaint);
- myPaint.setColor(Color.BLACK);
- myPaint.setTextSize(16);
- canvas.drawText(myString2,20,560,myPaint);
- }
- }
然后将我们自定义的View 加入到main.xml 布局文件中, 在这里设置View的背景色为白色,是为了更好地展现其中的内容。代码如下:
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:orientation="vertical">
- <TextView
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/hello"/>
- <Button
-
android:layout_width="match_parent"
-
android:layout_height="40dip"
-
android:text="下一张图"/>
- <com.viewTest.MyView
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:background="#FFFFFF"/>
-
</LinearLayout>
初始的activity.java文件并不需要修改。最后的效果如下图所示:
分享到:
相关推荐
创建全新的视图将满足我们独特的UI需求。 本文介绍在指南针开发中会用到的罗盘的界面UI,通过继承View类实现的自定义视图,以此来深刻了解自定义视图。
本文实例讲述了Android开发之自定义View(视图)用法。分享给大家供大家参考,具体如下: View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展...
android中自定义视图view的讲解,有很多现有的例子可以进行使用,非常方便
主要介绍了Android App中自定义View视图的实例教程,详细讲解了如何在创建View中定义各种锁需要的样式属性,需要的朋友可以参考下
资源为博客实例:http://blog.csdn.net/lmj623565791/article/details/24529807 有问题博客留言
通过本示例的学习,初学者可快速掌握自定义控件的开发技巧。本例是博文http://blog.csdn.net/l1028386804/article/details/47337949的完整代码,如想了解实现细节,请参考博文:...
Android自定义ShadowView,可替代CardView使用
Android自定义 View - 仿淘宝 淘抢购进度条
自定义View学习之几何图形的绘制:维度图表绘制(模仿京东白条个人信用评分维普图的绘制)
Barber is your personal custom view stylist. Simply annotate your fields using the @StyledAttr or @AndroidAttr annotations Call the appropriate Barber.style(this...) variant Let Barber take care of ...
ShelfView一个用实际书架样式展示图书的Android自定义视图
1、显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数据为空视图,支持为失败视图设置点击事件重新...2、支持个性化设置,自定义设置 加载、失败、空数据视图。 博客讲解:http://blog.csdn.net/yissan
自定义View绘图
Android自定义控件---“取消”视图 此Demo博客地址:http://blog.csdn.net/u012814441/article/details/51220396
Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入...
本文实例讲述了Android实现在xml文件中引用自定义View的方法。分享给大家供大家参考,具体如下: 在xml中引用自定义view 方法一: <view class=com.test.copytext.CopyText android:layout_width=fill_parent ...
与您的自定义 View 可以直接扩展 View 类的方式相同,或者您可以扩展默认的 View 控件之一,例如 TextView。 现在,覆盖将 Context 和 AttributeSet 对象作为参数的构造函数。 导入 android.content.Context; 导入 ...
Android 支持定制的树状自定义View功能 ①多级树视图基本文件管理器布局 ②记住扩张状态自动展开最后一个未关闭的目录 ③自定义TreeAdapter不同类型的文档显示不同的图标 ④动态添加和删除节点删除和添加文件后...