Android UI开发(五)Bitmap和Canvas实例
Android的Bitmap的修改方法

Android的 Bitmap的修改方法
Android的Bitmap和J2ME的Image比较类似。 如果我想从resource里读入一个图片,然后在这个图片上draw一点自己的信息,比如文字。 再画到屏幕上怎么做呢? J2ME里只要Image.getGraphic() 拿到 Graphic的对象就可以想draw什么就draw什么了。 那么Android里怎么实现呢? Java 代码 复制代码 代码如下:
以上代码后பைடு நூலகம்可以用canvas的draw函数在Bitmap上作修改了。 之后只要在onDraw里,用onDraw的参数canvas来drawBitmap就可以了。
Bitmap img = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(); canvas.setBitmap(img); Bitmap img = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(); canvas.setBitmap(img);
Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)标签:图形androidpathfloatclass2012-01-20 20:02 151861人阅读评论(64) 收藏举报分类:android(12)版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+] 1、首先说一下canvas类:Class OverviewThe Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).这个类相当于一个画布,你可以在里面画很多东西;我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。
也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。
两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。
如何使用Android的绘图和动画功能进行应用开发(九)

随着移动应用的快速发展,人们对于移动应用的需求也越来越高。
在Android应用开发中,绘图和动画功能是非常重要的一部分。
利用这些功能,我们可以为用户提供更加丰富、生动的界面和交互体验。
本文将介绍如何使用Android的绘图和动画功能进行应用开发,并且结合实例进行详细讲解。
绘图功能是Android开发中非常重要的一环,它可以帮助我们创建各种各样的图形,包括线条、图像、文本等。
首先,我们需要了解Android绘图的基本概念和原理。
在Android中,绘图是通过Canvas和Paint类来实现的。
Canvas类提供了绘制图形的方法,而Paint类则定义了图形的颜色和样式。
在Android应用中,绘制图形的方法有很多,比如使用Path绘制自定义的图形,使用Bitmap绘制位图,使用ShapeDrawable绘制形状等。
接下来,我们将以绘制一个简单的圆形为例,来介绍如何使用Canvas和Paint类进行绘图。
首先,我们需要在布局文件中定义一个View来显示绘制的图形。
在XML文件中添加如下代码:```<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android:id="@+id/myView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>```然后,在Java文件中创建一个自定义的View类MyView,并且重写onDraw方法,在该方法内进行绘图操作。
具体代码如下:```public class MyView extends View {private Paint mPaint;public MyView(Context context) {super(context);initPaint();}public MyView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);initPaint();public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initPaint();}private void initPaint() {mPaint = new Paint();();();}@Overrideprotected void onDraw(Canvas canvas) {(canvas);float centerX = getWidth() / 2;float centerY = getHeight() / 2;float radius = (centerX, centerY);(centerX, centerY, radius, mPaint);}```这样,一个简单的圆形就绘制出来了。
Android UI开发专题

/cmdn/bbs/viewthread.php?tid=18736&page=1 #pid89255Android UI开发专题(一) 之界面设计近期很多网友对Android用户界面的设计表示很感兴趣,对于Android UI开发自绘控件和游戏制作而言掌握好绘图基础是必不可少的。
本次专题分10节来讲述,有关OpenGL ES相关的可能将放到以后再透露。
本次主要涉及以下四个包的相关内容:android.content.res 资源类android.graphics 底层图形类android.view 显示类android.widget 控件类一、android.content.res.Resources对于Android平台的资源类android.content.res.Resources可能很多网友比较陌生,一起来看看SDK上是怎么介绍的吧,Contains classes for accessing application resources, such as raw asset files, colors, drawables, media or other other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.平时用到的二进制源文件raw、颜色colors、图形drawables和多媒体文件media的相关资源均通过该类来管理。
int getColor(int id) 对应res/values/colors.xmlDrawable getDrawable(int id) 对应res/drawable/XmlResourceParser getLayout(int id) 对应res/layout/String getString(int id) 和CharSequence getText(int id) 对应res/values/strings.xmlInputStream openRawResource(int id) 对应res/raw/void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) 对应res/xml/ String[] getStringArray(int id) res/values/arrays.xmlfloat getDimension(int id) res/values/dimens.xml二、android.graphics.Bitmap作为位图操作类,Bitmap提供了很多实用的方法,常用的我们总结如下:boolean compress(pressFormat format, int quality, OutputStream stream) 压缩一个Bitmap对象根据相关的编码、画质保存到一个OutputStream中。
Android学习之BitMap用法实例

Android学习之BitMap⽤法实例下⾯简单说明了BitMap的⽤法:从服务器下载⼀张图⽚,显⽰在ImageView控件上,并将该图⽚保存在移动设备的SD上。
1// 根据⽹络URL获取输⼊流2public InputStream getUrlInputStream(String strUrl) throws IOException {3 URL url = new URL(strUrl);4 HttpURLConnection conn = (HttpURLConnection) url.openConnection();5 InputStream inputStream = conn.getInputStream();6if (inputStream != null) {7return inputStream;8 } else {9 Log.i("inputStream", "输⼊流对象为空");10return null;11 }12 }1314// 将输⼊流转化为Bitmap流15public Bitmap getBitmap(InputStream inputStream) {16 Bitmap bitmap = null;17if (inputStream != null) {18 bitmap = BitmapFactory.decodeStream(inputStream);19return bitmap;20 } else {21 Log.i("test", "输⼊流对象in为空");22return null;23 }24 }2526// 给ImageView对象赋值27public void setWidgetImage(Bitmap bitmap) {28 ImageView img = new ImageView(this);29if (bitmap != null) {30 img.setImageBitmap(bitmap);31 }32 }3334// 获取SD卡上的⽂件存储路径35public void createSDFile() {36 File sdroot = Environment.getExternalStorageDirectory();37 File file = new File(sdroot + "/Android/date/包名/⽂件名");38if (Environment.MEDIA_MOUNTED.equals(Environment39 .getExternalStorageState())) {40// 相关操作41 }42 }4344// 将图⽚保存到SD卡上45public boolean readToSDCard(File file, Bitmap bitmap)46throws FileNotFoundException {47 FileOutputStream os = new FileOutputStream(file);48return press(pressFormat.PNG, 90, os);49// true:表⽰操作成功,false:表⽰操作失败50 }。
Android中使用Bitmap实现图像操作的原理

• inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回 值为null,但是Options的outAbc中解出了图像的基本信息。
• public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height, Matrix m, boolean filter) • public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height) • public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight,boolean filter) • 第一个方法是最终的实现,后两种只是对第一种方法的封装 • 第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切 • 第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。
使用Bitmap实现图像操作的原理|保存图像文件
8
保存图像文件
• 经过图像变换之后的Bitmap里的数据可以保存到图像压缩文件里(JPG/PNG)。
JNI实例化。 • 这必然是某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就
是BitmapFactory。
android学习资料:绘图Canvas

Andorid绘图Canvas做Java的都知道,绘图肯定首先需要一个Canvas,然后在用Graphics在上面绘制自己想要图案。
不错,Android 上面也类似,你可以从一个Bitmap得到它的Canvas(new Canvas(BitMap bitMap)),进行绘制,也可以自定义一个View,用它的Canvas。
不同的是,Android里没有Graphics,而用 Paint代之,当然用法也稍有不同。
以下是自定义View的一段代码:Java代码1.Java代码1.@Override2.publicvoidonDraw(Canvascanvas){3.//首先定义一个paint4.Paintpaint=newPaint();5.6.//绘制矩形区域-实心矩形7.//设置颜色8.paint.setColor(Color.WHITE);9.//设置样式-填充10.paint.setStyle(Style.FILL);11.//绘制一个矩形12.canvas.drawRect(newRect(0,0,getWidth(),getHeight()),paint);13.14.//绘空心矩形15.//设置颜色16.paint.setColor(Color.RED);17.//设置样式-空心矩形18.paint.setStyle(Style.STROKE);19.//绘制一个矩形20.canvas.drawRect(newRect(10,10,50,20),paint);21.22.//绘文字23.//设置颜色24.paint.setColor(Color.GREEN);25.//绘文字26.canvas.drawText(str,30,30,paint);27.28.//绘图29.//从资源文件中生成位图30.Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.icon);31.//绘图32.canvas.drawBitmap(bitmap,10,10,paint);33.}34.35.@Override36.publicvoidonDraw(Canvascanvas){37.//首先定义一个paint38.Paintpaint=newPaint();39.40.//绘制矩形区域-实心矩形41.//设置颜色42.paint.setColor(Color.WHITE);43.//设置样式-填充44.paint.setStyle(Style.FILL);45.//绘制一个矩形46.canvas.drawRect(newRect(0,0,getWidth(),getHeight()),paint);47.48.//绘空心矩形49.//设置颜色50.paint.setColor(Color.RED);51.//设置样式-空心矩形52.paint.setStyle(Style.STROKE);53.//绘制一个矩形54.canvas.drawRect(newRect(10,10,50,20),paint);55.56.//绘文字57.//设置颜色58.paint.setColor(Color.GREEN);59.//绘文字60.canvas.drawText(str,30,30,paint);61.62.//绘图63.//从资源文件中生成位图64.Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.icon);65.//绘图66.canvas.drawBitmap(bitmap,10,10,paint);67.}以上需要注意的有三点:1、Android中的Rect和java中的可能稍有区别,前两个参数是左上角的坐标,后两个参数是右下角的坐标(不是宽度和高度);2、Style.STROKE和Style.FILL外边的像素数是有区别的,这点和java里一样;3、绘文字时,设置的坐标点为(30,30),但绘出来后你会发现,文字的左上角坐标要比你设置的偏上,不知道是android设置的bug,还是我们有理解到坐标点的意义。
Android原生绘图工具Canvas详细

Android原⽣绘图⼯具Canvas详细⽬录1.Canvas提供的绘制函数2.绘制背景3.绘制矩形drawRect4.绘制圆⾓矩形drawRoundRect5.绘制圆形drawCircle6.绘制路径drawPath7.绘制直线drawLine8.绘制圆弧drawArc9.绘制椭圆drawOval10.绘制点drawPoint11.绘制⽂本drawText 沿路径绘制⽂本drawTextOnPath12.绘制bitmap drawBitmap如果对上⼀篇感兴趣的话可以看看下⾯步⼊正题:先看看效果图1.Canvas提供的绘制函数canvas.drawColor();canvas.drawRGB();canvas.drawRect();canvas.drawRoundRect();canvas.drawCircle();canvas.drawPath();canvas.drawLine();canvas.drawArc();canvas.drawOval();canvas.drawPoint();canvas.drawPoints();canvas.drawText();canvas.drawTextOnPath();canvas.drawBitmap();2.绘制背景⽤于初始化和清空画布//绘制颜⾊,默认模式public void drawColor(@ColorInt int color) {super.drawColor(color);}//颜⾊绘制,设置modepublic void drawColor(@ColorInt int color, @NonNull PorterDuff.Mode mode) {super.drawColor(color, mode);}//参数0-255public void drawARGB(int a, int r, int g, int b) {super.drawARGB(a, r, g, b);}//参数0-255public void drawRGB(int r, int g, int b) {super.drawRGB(r, g, b);}第⼆个函数中⽤到PorterDuff.Mode,PorterDuff.Mode主要⽤于图像混合模式,后⾯细说//传⼊RectFpublic void drawRect(@NonNull RectF rect, @NonNull Paint paint) {super.drawRect(rect, paint);}//传⼊Rectpublic void drawRect(@NonNull Rect r, @NonNull Paint paint) {super.drawRect(r, paint);}//把Rect的四个点坐标传⼊public void drawRect(float left, float top, float right, float bottom, @NonNull Paint paint) {super.drawRect(left, top, right, bottom, paint);}Rect 和RectF都是提供⼀个矩形局域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Android UI开发专题的前五节我们讲到的东西主要是基础和理论内容,从本次
Android123将通过实例代码来演示,本次主要是Bitmap和Canvas类的使用,根据要求缩放Bitmap对象并返回新的Bitmap对象。
centerToFit方法一共有4个参数,返回一个Bitmap 类型,第一个参数为原始的位图对象,width和height分别为新的宽和高,而Context是用来加载资源的上下文实例。
1Bitmap centerToFit(Bitmap bitmap,int width,int height, Context context) {
2
3final int bitmapWidth=bitmap.getWidth();//获取原始bitmap的宽度
4
5final int bitmapHeight=bitmap.getHeight();
6
7if(bitmapWidth<width || bitmapHeight<height) {
8
9int color=context.getResources().getColor(R.color.window_background);//从资源读取背景色
10
11Bitmap centered=Bitmap.createBitmap(bitmapWidth<width ? width : bitmap Width,
12
13bitmapHeight<height ? height : bitmapHeight, Bitmap.Config.RGB_565);
14
15centered.setDensity(bitmap.getDensity());
16
17Canvas canvas=new Canvas(centered);
18
19canvas.drawColor(color);//先绘制背景色
20
21canvas.drawBitmap(bitmap, (width-bitmapWidth)/2.0f, (height-bitmapHei ght)/2.0f,null);//通过Canvas绘制Bitmap
22
23bitmap=centered;
24
25}
26
27return bitmap;//返回新的bitmap
28
29}
30
31
本段代码从Android 2.1开始将会应用在全新的Home主屏上,同时相关的ImageView 的适应屏幕大小的setScaleType(fitCenter) 方法类似,仅仅是我们制定了未来的大小。