本文译自:http://developer.android.com/guide/topics/graphics/2d-graphics.html
形状绘制
在想要动态的绘制一些二维图形的时候,ShapeDrawable对象将会满足你的需要。用ShapeDrawable对象能够编程绘制任何能够想象得到的原始形状和主题样式。
ShapeDrawable类是Drawable类的一个子类,因此能够在任何期望使用Drawable对象的地方使用ShapeDrawable对象---如用setBackgroundDrawable()方法设置View对象的背景。当然,也可以用绘制的形状作为自己定制的View对象,然后把它添加到你的布局中。因为ShapeDrawable类有自己的draw()方法,所以能够在View.onDraw()方法执行期间创建一个绘制ShapeDrawable图形的View子类。以下代码只是这种处理一个基本的扩展,它用ShapeDrawable对象来绘制一个View视窗:
publicclassCustomDrawableViewextendsView{
privateShapeDrawable
mDrawable;
publicCustomDrawableView(Context
context){
super(context);
int x
=10;
int y
=10;
int width
=300;
int height
=50;
mDrawable
=newShapeDrawable(newOvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x,
y, x
+ width, y
+ height);
}
protectedvoid
onDraw(Canvas canvas){
mDrawable.draw(canvas);
}
}
在上例的构造器中,ShapeDrawable是作为一个OvalShape对象来定义的,然后给它设定了一个颜色和边框。如果不设置边框,那么形状就不会被绘制;如果没有设置颜色,那么默认的颜色是黑色。
用这个定制的View对象,能够绘制任何想要的形状。在上面的例子中,我们在一个Activity中用编程的方式绘制了一个形状:
CustomDrawableView mCustomDrawableView;
protectedvoid
onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mCustomDrawableView
=newCustomDrawableView(this);
setContentView(mCustomDrawableView);
}
如果想要从XML布局中,而不是在Activity中来绘制这个定制的图形,那么CustomDrawable类必须重写View(Context, AttributeSet)构造器,该构造器会在从XML中填充View对象时被调用。然后把这个CustomDrawable元素添加到XML中,如:
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
ShapeDrawable类(像在android.graphics.drawable包中的其他一些Drawable类型)允许用公共的方法定义各种属性。其中有些属性可能需要调整,包括:透明度、颜色过滤、抖动、不透明和颜色等。
也能够使用XML定义初始的绘制形状。更多的信息,请阅读绘图资源(Drawable Resources)文档中的形状绘制(Shape Drawables)一节(http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape
分享到:
相关推荐
Android 自定义画布canvas 实现绘制和清空画布功能,内含源码、apk
wxml-to-canvas 小程序内通过静态模板和样式绘制 canvas ,导出图片,可用于生成分享图等场景
4-7-2(Canvas画布).7z
easy-flow-Vue-element-+JsPlumb实现用canvas绘制流程图,源码,亲测可用。界面也美观!!
android-openGL-canvas-master.zip
android-canvas-donut-chart.7z
使用vue 2.0开发的基于 canvas 绘制海报的组件!
node-canvas, node Canvas是一个Cairo支持的NodeJS画布实现 节点画布这是版本 2.0.0 -alpha的文档Alpha版本的2.0可以使用 npm install canvas@next 安装。有关从 1.x 升级到 2. x.的指南,请参阅变更日志版本 1.x ...
项目应用功能提供一个类似Android Canvas类的使用OpenGL来实现实现的canvasGL。可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画...
Leaflet.Canvas-Markers-0.2.0 https://github.com/corg/Leaflet.Canvas-Markers
这个包允许您使用 node.js 中的画布元素控制 WS281x-LED 网格(如 Adafruit Neopixel)。 这个包提供了一个围绕模块的小包装,主要处理从画布像素数据到模块所需格式的格式转换。 设置 通过 npm 安装: npm ...
一个通过在iOS和Android上触摸来进行绘图的React Native组件。 特征 支持iOS和Android 绘画时笔触的厚度和颜色是可变的。 可以一一撤消笔画。 可以将路径数据序列化为JSON。 因此,它可以同步其他设备或其他人并...
QML--Canvas画布实现矩形圆形等圈定
这通过创建无限增长的缓冲画布来工作,当使用.move([x, y])相对移动原点或绝对使用.setOrigin([x, y])相对移动原点时,可以调整画布的大小和位置。 本质上,包裹的画布成为一个窗口,您可以在缓冲画布周围移动。 当...
51CTO下载-HTML5 Tutorial - 41 - Saving and Restoring the Canvas
React本机签名画布 对Android && IOS && expo的基于本地签名组件的Canvas进行React 支持Android,iOS和Expo 没有本地依赖项的纯JavaScript实现 经过RN 0.50测试 核心使用 只依靠React和React本机 生成签名的base...
The-World-Is-Our-Canvas-源码.rar
Vue Konva是一个JavaScript库,用于使用Vue绘制复杂的画布图形。 它提供了声明性和React性绑定。 所有vue-konva组件都对应于具有前缀“ v-”的同名Konva组件。 可用于Konva对象的所有参数都可以在config中作为...
Img-trans 基于Node-canvas和Express的后台图片转换组件
Android 自定义画布 绘制 撤销 清空 ssssssssssssss