Android开发者学习笔记——View、Canvas、bitmap

合集下载

Android应用开发基础

Android应用开发基础

Android应用开发基础近年来,随着移动互联网的飞速发展,Android手机应用的开发获得了越来越广泛的关注。

而要成为一名合格的Android应用开发者,需要掌握一定的编程知识和技能。

本文就Android应用开发的基础知识做一些简单的介绍,从而对初学者提供一定的指导。

首先,Android系统是一个基于Linux内核的开放源代码软件栈,由Google公司开发和维护。

因此,在进行Android应用开发前,需要学习一些计算机基础知识,如Java语言、数据结构和算法等。

Java是Android开发的核心语言,在进行Android应用开发时,需要掌握Java的基本语法和面向对象编程思想。

Java语言是一种高级语言,并且具有跨平台性,因此可以在多种平台上运行相同的代码。

在Java语言中,面向对象编程是一种重要的开发方式,通过将代码组织成类和对象,使得系统更加灵活和易于维护。

另外,在进行Android应用开发时,还需要掌握一些常用的开发工具,如Android Studio等。

Android Studio是谷歌公司为Android应用开发者提供的官方开发工具,支持Java语言编写,具有丰富的特性和插件库,可以大大简化开发工作,提升开发效率。

在了解完这些基础知识后,下一步就是了解Android应用程序的实现过程。

Android应用的实现主要分为四大阶段:界面设计、逻辑实现、数据处理、以及应用发布。

界面设计是Android应用开发的第一步,开发者需要使用XML语言编写应用的布局和控件等,构建应用的用户界面。

XML是一种基于文本的标记语言,用于描述数据的结构和内容。

通过使用XML标签定义布局和控件信息,可以快速和简便地创建Android应用的界面。

接下来是逻辑实现,即将设计好的界面与代码相结合,实现应用的功能。

在Java语言中,可以使用类和方法来实现应用逻辑。

开发者需要根据应用的需求,编写相应的类和方法,实现应用的各种功能。

view 的绘制流程

view 的绘制流程

view 的绘制流程View 是 Android 开发中的一个重要概念,它负责用户界面的绘制和交互。

本文将详细介绍 View 的绘制流程,帮助读者更好地理解和使用 View。

一、View 的绘制流程概述在 Android 应用程序中,View 的绘制流程主要分为三个阶段:测量(Measure)、布局(Layout)和绘制(Draw)。

下面将详细介绍每个阶段的具体流程。

二、测量阶段(Measure)1. 测量阶段的入口是 View 的 measure() 方法。

在该方法中,View 会根据自身的布局参数(LayoutParams)来确定自身的宽度和高度。

2. 在 measure() 方法中,View 会先通过 getMeasuredWidth() 和getMeasuredHeight() 方法获取自身的宽度和高度。

如果宽度和高度都大于0,则说明该 View 已经完成了测量,测量流程结束。

否则,继续进行测量。

3. 如果View 的宽度或高度为0,则需要根据测量模式(MeasureSpec)来确定其测量值。

MeasureSpec 是一个由测量模式和测量值组成的 32 位整数,其中测量模式占高 2 位,测量值占低30 位。

4. 在确定测量值之前,测量模式会被解析为三种模式:EXACTLY、AT_MOST 和 UNSPECIFIED。

EXACTLY 表示精确的尺寸,AT_MOST 表示最大尺寸,UNSPECIFIED 表示不受限制的尺寸。

5. 根据测量模式的不同,View 的测量值也会相应地发生变化。

如果测量模式为 EXACTLY,则测量值就是精确的尺寸;如果测量模式为AT_MOST,则测量值不能超过最大尺寸;如果测量模式为UNSPECIFIED,则测量值可以任意大小。

6. 测量值确定后,会通过 setMeasuredDimension() 方法将测量值保存起来,供后续的布局和绘制使用。

三、布局阶段(Layout)1. 布局阶段的入口是 View 的 layout() 方法。

ANDROID中WEBVIEW的使用

ANDROID中WEBVIEW的使用

ANDROID中WEBVIEW的使用在Android中,WebView是一个可用于显示Web内容的小部件。

它允许你在应用程序中嵌入浏览器功能,以便用户可以访问和浏览Web页面。

WebView的使用非常广泛,对于那些需要在应用程序中显示网页内容的开发人员来说,它是一个非常强大和灵活的工具。

使用WebView时,你可以通过编程方式加载和显示Web页面,并且还可以执行其他与Web相关的任务,例如处理JavaScript事件、向Web页面注入JavaScript代码、截取Web页面的截图等等。

下面是一些WebView的常见用法和功能:1.加载网页:WebView最基本的用法是用于加载一个网页。

你可以通过调用WebView的`loadUrl(`方法来加载一个URL,或者通过调用`loadData(`方法将HTML数据加载到WebView中。

例如:```javaWebView webView = findViewById(R.id.web_view);//或者加载HTML数据webView.loadData("<html><body>Hello World!</body></html>", "text/html", null);```2.处理网页加载事件:WebView提供了一些回调方法,使你可以处理网页加载过程中的不同事件,例如页面开始加载、页面加载完成、页面加载失败等。

你可以通过扩展WebViewClient类并复写这些回调方法来实现特定的行为。

例如:```javawebView.setWebViewClient(new WebViewClienpublic void onPageStarted(WebView view, String url, Bitmap favicon)//页面开始加载时执行}public void onPageFinished(WebView view, String url)//页面加载完成时执行}public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)//页面加载失败时执行}});```3. 处理JavaScript事件:WebView默认禁用了JavaScript执行。

Android开发自学笔记(AndroidStudio)—4.1布局组件

Android开发自学笔记(AndroidStudio)—4.1布局组件

Android开发⾃学笔记(AndroidStudio)—4.1布局组件⼀、引⾔Android的界⾯是有布局和组件协同完成的,布局好⽐是建筑⾥的框架,⽽组件则相当于建筑⾥的砖⽡。

组件按照布局的要求依次排列,就组成了⽤户所看见的界⾯。

在Android4.0之前,我们通常说Android开发五⼤布局和四⼤组件,这五⼤布局就是:1. LinearLayout 线性布局2. FrameLayout 单帧布局,也有中⽂翻译为帧布局、框架布局。

3. RelativeLayout 相对布局4. AbsoluteLayout 绝对布局5. TableLayout 表格布局⽽在Android4.0之后⼜新增了⼀种GridLayout⽹格布局。

⼆、LinearLayout线性布局线性布局是Android开发中最常见的⼀种布局⽅式,它是按照垂直或者⽔平⽅向来布局,通过“android:orientation”属性可以设置线性布局的⽅向。

属性值有垂直(vertical)和⽔平(horizontal)两种。

线性布局的排列在某⾏或者某列并不会⾃动换⾏或换列,就是说如果采⽤⽔平布局,控件宽度超过屏幕显⽰的话,后⾯的控件都将被隐藏,不会⾃动换⾏。

常⽤的属性有:1. android:orientation:可以设置布局的⽅向2. android:id - 为控件指定相应的ID3. android:text - 指定控件当中显⽰的⽂字,需要注意的是,这⾥尽量使⽤string.xml4. android:gravity - 指定控件的基本位置,⽐如说居中,居右等位置5. android:textSize - 指定控件当中字体的⼤⼩6. android:background - 指定控件所⽤的背景⾊,RGB命名法7. android:layout_width - 指定控件的宽度8. android:layout_height - 指定控件的⾼度9. android:layout_weight - 指定控件的占⽤⽐例10. android:padding - 指定控件的内边距,也就是说控件当中的内容11. android:sigleLine - 如果设置为真的话,则将控件的内容显⽰在⼀⾏当中layout_weight属性以控制各个控件在布局中的相对⼤⼩。

Android UI开发专题

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移动应用开发技术课第一章笔记

android移动应用开发技术课第一章笔记

android移动应用开发技术课第一章笔记第一章:Android移动应用开发技术课笔记一、引言在当今移动互联网时代,Android系统以其开放性和普及率成为了最受欢迎的移动操作系统之一。

随着移动应用市场的不断扩大,对Android移动应用开发技术的需求也日益增加。

学习和掌握Android移动应用开发技术成为了越来越多人的选择。

二、Android移动应用开发技术概述1. 什么是Android?Android是一款基于Linux操作系统的开源移动设备操作系统,主要用于触摸屏移动设备,如智能手机和平板电脑。

Android操作系统的开放性使得开发者可以自由定制和开发应用,受到了广大用户的喜爱。

2. Android移动应用开发技术的重要性随着信息化和数字化的发展,移动应用成为了人们获取信息和进行交流的重要方式。

而Android作为最主流的移动操作系统之一,其应用的开发和推广具有巨大的市场潜力和商业价值。

掌握Android移动应用开发技术成为了许多开发者和从业者的追求目标。

三、学习Android移动应用开发技术的重要性1. 对于个人的意义学习Android移动应用开发技术可以提升个人的职业技能,并且在移动应用开发领域有更多的发展机会。

可以通过开发自己的应用来实现个人价值和创造财富。

2. 对于企业的意义随着移动互联网的发展,各类企业都希望拥有自己的移动应用,以提升品牌形象和服务用户。

懂得Android移动应用开发技术的人才对企业来说显得格外宝贵。

四、学习Android移动应用开发技术的途径1. 自学通过阅读相关书籍、网上教程和参加线上培训班,可以自学Android 移动应用开发技术。

这种方式需要具备较好的自学能力和毅力。

2. 参加培训班选择权威的培训机构进行系统的学习和培训,可以更快速、系统地学习Android移动应用开发技术。

五、Android移动应用开发技术的未来发展随着人工智能、物联网、区块链等技术的不断发展,Android移动应用开发技术也将不断拓展应用场景和技术深度。

AndroidApp开发中将View或Drawable转为Bitmap的方法

AndroidApp开发中将View或Drawable转为Bitmap的方法

AndroidApp开发中将View或Drawable转为Bitmap的⽅法View转换为BitmapAndroid中经常会遇到把View转换为Bitmap的情形,⽐如,对整个屏幕视图进⾏截屏并⽣成图⽚;Coverflow中需要把⼀页⼀页的view转换为Bitmap、以便实现复杂的图形效果(阴影、倒影效果等);再⽐如⼀些动态的实时View为便于观察和记录数据、需要临时⽣成静态的Bitmap。

实现⽅法:1)下⾯是笔者经常⽤的⼀个转换⽅法public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight){Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);view.draw(new Canvas(bitmap));return bitmap;}或者⽤如下⽅法:public static Bitmap convertViewToBitmap(View view){view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap;} ⼀般情况下,这个⽅法能够正常的⼯作。

但有时候,⽣成Bitmap会出现问题(Bitmap全⿊⾊)。

主要原因是drawingCache的值⼤于系统给定的值。

我们可以看⼀下buildDrawingCache()⽅法中的⼀段代码:if (width <= 0 || height <= 0 ||(width * height * (opaque && !translucentWindow ? 2 : 4) > ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize())) { destroyDrawingCache();return;}上⾯的代码中,width和height是所要cache的view绘制的宽度和⾼度,所以(width * height * (opaque && !translucentWindow ? 2 : 4) 计算的是当前所需要的cache⼤⼩。

安卓UI控件详细笔记

安卓UI控件详细笔记
在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。
android:focusable="true" android:focusableInTouchMode="true"
android:singleLine="true"
16、android:maxLength:限制显示的文本长度,超出部分不显示。 17、android:lines:设置文本的行数,设置两行就显示两行,即使第二行没有数据也显示。 18、android:singleLine 设置文本是否是单行显示(默认false, 超出部分会换行)。如果设置为true,则超出部 分不显示, 只显示省略号...
2. android:inputType="textPersonName"
3. android:inputType="textPassword"
文本密码
4. android:inputType="numberPassword" 只能输入数字的密码
5. android:inputType="textEmailAddress" 电邮地址
Android提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android注册事件监听器。每个事件监听器都包含一个回调 方法(callback method),这个回调方法主要的工作就是回应或处理用户的操作。
(二)、Android UI事件处理中基于监听和回调的事件处理机制(event listener):
7、 android:ems
设置TextView的宽度为N个字符的宽度

android bitmap修改饱和度原理

android bitmap修改饱和度原理

android bitmap修改饱和度原理"Android Bitmap 修改饱和度原理"饱和度是指色彩的纯度或者浓度,它反映了颜色的鲜艳程度。

在Android 开发中,我们经常需要对图像进行处理来改变其饱和度。

本文将详细介绍Android Bitmap如何修改饱和度的原理,并给出一步一步的解释。

在Android平台上,Bitmap 是一种常用的处理图像的对象。

饱和度的修改是通过改变图像的颜色空间来实现的。

Android提供了一个叫做ColorMatrix的类,允许我们使用矩阵变换来调整饱和度。

下面我们将一步一步解释如何使用ColorMatrix类来修改饱和度。

第一步:获取原始图像的Bitmap对象首先,我们需要获取原始图像的Bitmap对象。

可以通过以下代码来实现:Bitmap originalBitmap =BitmapFactory.decodeResource(getResources(),R.drawable.original_image);这里,我们使用了BitmapFactory类的decodeResource()方法来获取资源中的图像,并将其存储在originalBitmap对象中。

你可以根据你的需求使用其他的方法来获取Bitmap对象。

第二步:创建ColorMatrix对象接下来,我们将创建一个ColorMatrix对象。

ColorMatrix类提供了一系列方法用于执行矩阵变换。

我们可以使用其中的方法来修改饱和度。

ColorMatrix colorMatrix = new ColorMatrix();这一行代码创建了一个初始的ColorMatrix对象,并将其存储在colorMatrix变量中。

第三步:设置饱和度值现在,我们可以通过修改ColorMatrix对象的值来调整饱和度。

在ColorMatrix类中,饱和度的值被存储在一个4x5的矩阵变量中。

我们可以通过调用setSaturation()方法来设置饱和度的值。

android 常见view的用法

android 常见view的用法

android 常见view的用法常见的Android View的用法有:1. TextView(文本视图):用于显示文本内容,可以设置字体、颜色、字体大小等属性。

2. ImageView(图片视图):用于显示图片,可以设置图片资源、缩放类型、背景等属性。

3. Button(按钮):用于触发点击事件,可以设置文本、背景、点击效果等属性。

4. EditText(编辑文本视图):用于输入文本内容,可以设置提示文本、输入类型、最大长度等属性。

5. RadioButton(单选按钮):用于在多个选项中选择一个,可以设置文本、选中状态等属性。

6. CheckBox(复选框):用于在多个选项中选择多个,可以设置文本、选中状态等属性。

7. ProgressBar(进度条):用于显示操作进度,可以设置进度值、样式、颜色等属性。

8. SeekBar(滑动条):用于选择数值范围,可以设置最小值、最大值、当前值等属性。

9. ListView(列表视图):用于显示大量数据列表,可以自定义每一项的布局和交互。

10. GridView(网格视图):用于显示数据的表格布局,可以自定义每个单元格的布局和交互。

11. RecyclerView(可复用列表视图):Android的推荐使用的列表视图,功能更强大、性能更优。

12. WebView(网页视图):用于显示网页内容,可以加载本地或远程网页。

13. ScrollView(滚动视图):用于包裹超出屏幕大小的内容,并通过滑动来查看全部内容。

14. LinearLayout(线性布局):用于按照水平或垂直方向排列子视图。

15. RelativeLayout(相对布局):用于按照相对位置摆放子视图,灵活性更高。

16. FrameLayout(帧布局):用于叠加子视图,通常用于显示单个子视图或切换视图。

这些是Android中常见的View,开发者可以根据实际需求选择合适的View并设置相应的属性,实现各种不同的界面效果。

安卓高级开发-下-笔记(共17周)第十四周

安卓高级开发-下-笔记(共17周)第十四周

第四章管理Android系统桌面第一节管理壁纸初识Android壁纸在Android中,壁纸分为静态与动态两种。

静态壁纸是一张图片,而动态壁纸则以动画为表现形式,或者可以对用户的操作作出反应。

这两种形式看似差异很大,其实二者的本质是统一的。

它们都以一个Service的形式运行在系统后台,并在一个类型为TYPE_WALLPAPER 的窗口上绘制内容。

➢Android壁纸的实现与管理分为三个层次:⏹WallpaperService与Engine。

同SystemUI一样,壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService。

当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘制工作,因此继承并定制WallpaperService是开发者进行壁纸开发的第一步。

Engine是WallpaperService中的一个内部类,实现了壁纸窗口的创建以及Surface的维护工作。

另外,Engine提供了可供子类重写的一系列回调,用于通知壁纸开发者关于壁纸的生命周期、Surface状态的变化以及对用户的输入事件进行响应。

可以说,Engine类是壁纸实现的核心所在。

壁纸开发者需要继承Engine类,并重写其提供的回调以完成壁纸的开发。

这一层次的内容主要体现了壁纸的实现原理。

⏹WallpaperManagerService,这个系统服务用于管理壁纸的运行与切换,并通过WallpaperManager类向外界提供操作壁纸的接口。

当通过WallpaperManagaer的接口进行壁纸的切换时,WallpaperManagerService会取消当前壁纸的WallpaperService的绑定,并启动新壁纸的WallpaperService。

另外,Engine类进行窗口创建时所使用的窗口令牌也是由WallpaperManagerService提供的。

Android画图学习总结(五)——Paint_玉树临疯_ 京华志

Android画图学习总结(五)——Paint_玉树临疯_ 京华志
<TD width=84>颜色</TD>
<TD width=372>setColor(int color)<BR>int getColor()</TD></TR>
<TR>
<TD width=127>&nbsp;</TD>
<TD width=84>下划线</TD>
<TD width=372>boolean&nbsp; isUnderlineText()<BR>setUnderlineText(boolean underlineText)</TD></TR></TBODY></TABLE>
<TD width=284>Draw the text, with origin at (x,y), using the specified paint, along the specified path.</TD></TR></TBODY></TABLE>
<P>在所有的函数中,参数主要分为3部分:字符串(String、char、CharSequence),长度(start—end、index—count),如何显示String(paint)。前2个参数一看就明白,这里我们主要介绍第3个参数Paint paint。</P>首先,什么是Paint?
<TABLE cellSpacing=0 cellPadding=0 width=584 border=1>
<TBODY>

drawbitmap参数范围

drawbitmap参数范围

drawbitmap参数范围drawbitmap是一个在Android开发中常用的方法,用于在画布上绘制位图。

它的参数范围决定了绘制位图的位置、大小和其他属性。

本文将详细介绍drawbitmap方法的参数范围,帮助读者更好地理解和使用这个方法。

一、canvasdrawbitmap方法的第一个参数是canvas,表示要在哪个画布上绘制位图。

canvas是Android绘图系统的核心类之一,它提供了一系列方法用于绘制各种图形。

在使用drawbitmap方法时,我们需要先获取到要绘制位图的画布对象。

二、bitmapdrawbitmap方法的第二个参数是bitmap,表示要绘制的位图。

bitmap是Android中表示图像的类,它可以从资源、文件或其他来源加载图像数据。

在使用drawbitmap方法时,我们需要先创建好要绘制的位图对象。

三、srcRectdrawbitmap方法的第三个参数是srcRect,表示要绘制的位图的区域。

srcRect是一个矩形对象,用于指定要绘制的位图的哪个部分。

通过设置srcRect的左上角和右下角的坐标,我们可以定义一个矩形区域,然后只绘制该区域内的位图部分。

四、dstRectdrawbitmap方法的第四个参数是dstRect,表示绘制位图的目标区域。

dstRect也是一个矩形对象,用于指定位图在画布上的位置和大小。

通过设置dstRect的左上角和右下角的坐标,我们可以定义一个矩形区域,然后将位图绘制在该区域内。

五、paintdrawbitmap方法的第五个参数是paint,用于指定绘制位图时的画笔属性。

paint是Android中用于绘制图形和文本的工具类,它可以设置颜色、字体、线条样式等属性。

通过设置paint的属性,我们可以实现不同的绘制效果。

六、其他参数除了上述五个必选参数外,drawbitmap方法还有一些可选参数,用于控制位图的绘制方式。

例如,可以通过设置是否抗锯齿、是否过滤等参数来影响绘制的效果。

Android基础常用英语汇总

Android基础常用英语汇总

Android基础常用英语汇总Day01单词activity[ækˈtɪvəti] 活动;活跃framework[ˈfreɪmwɜ:k] 框架;构架;(体系的)结构;机构,组织driver[ˈdraɪvə(r)] 驱动器,驱动程序virtual[ˈvɜ:tʃuəl] 虚拟的kernel[ˈkɜ:nl] 核心,内核,要点kernelplatform[ˈplætfɔ:m] 平台,纲领platformpreferences['prefərənsɪs] 参数,偏好launcher[ˈlɔ:ntʃə(r)] 发射器,启动器emulator [ˈemjul eɪtə(r)] 模拟器,仿真器,仿真程序bundl e[ˈbʌndl] 捆,一批generate[ˈdʒenəreɪt] 生成,形成,造成asset[ˈæset]资产,财产manifest[ˈmænifest]清单,货单intent[ɪnˈtent]意图,目的relative[ˈrelətɪv] 相对的,相关的linear[ˈlɪniə(r)] 直线的,线形的absolute[ˈæbsəlu:t] 绝对的,完全的orientation[ˌɔ:riənˈteɪʃn] 方向,朝向,取向horizontal[ˌhɒrɪˈzɒntl] 水平的,地平线的vertical[ˈvɜ:tɪkl] 垂直的,竖立的align [əˈlaɪn] 排列,使成一线density[ˈdensəti] 密度wrap[ræp] 包裹,缠绕ind ependent[ˌɪndɪˈpendənt] 自主的,独立的,不相关连的layout[ˈl eɪaʊt] 布局,安排,设计internal[ɪnˈtɜ:nl] 内部的,国内的storage[ˈstɔ:rɪdʒ] 存储,贮存Day02 单词l og[lɔ:g] 日志,记录filter[ˈfɪltə(r)] 过滤器,滤波器verbose[vɜ:ˈbəʊs] 冗长的,啰唆的verbose external[ɪkˈstɜ:nl] 外面的,外部的externaleditor[ˈedɪtə(r) 编辑程序,编辑器editor serializer['sɪərɪəlaɪzər] 可序列化的,序列化器serializer parser['pɑ:sə]解析器,解剖器environment[ɪnˈvaɪrənmənt]环境,(运行)环境component[kəmˈpəʊnənt] 成分,组建compound[ˈkɒmpaʊnd] 复合物,组合物specify[ˈspesɪfaɪ] 指定,定义declare[dɪˈkleə(r)] 声明,宣布mount[maʊnt] 挂载,攀登Day03 单词cursor[ˈkɜ:sə(r)] 光标,游标journal[ˈdʒɜ:nl] 日报,日志primary[ˈpraɪməri] 首要的,主要的alter[ˈɔ:ltə(r)] 改变,修改mod el[ˈmɒdl] 模型,模式adapter[ə'dæptə] 适配器convert[kənˈvɜ:t] 转换,转变inflate[ɪnˈfl eɪt] 充气,打气dial og['daɪəlɒg] 会话,对话alert[əˈlɜ:rt] 警告,警报positive[ˈpɒzətɪv] 积极的,确实的,肯定的negative[ˈnɛɡətɪv] 消极的,否定的transaction[trænˈzækʃn] 交易,业务,事务styl e[staɪl] 样式,风格theme[θi:m]主题,主旋律Day04 单词connection[kəˈnekʃn] 连接,联系handl er[ˈhændlə(r)] 处理者,管理者queue[kju:] 队列l ooper['lu:pə] 轮询器obtain[əbˈtein]获得,得到bitmap[ˈbɪtmæp] 位图agent[ˈedʒənt] 代理,代理人notation[noʊˈteɪʃn] 记号,标记法visible [ˈvɪzəbəl] 显示的,可见的gone[gɒn] 过去的,消失的singl e[ˈsɪŋgl]唯一的,单一的smart[smɑ:t]聪明的,敏捷的Day05 单词property[ˈprɒpəti] 属性,特性asynchronous[eɪˈsɪŋkrənəs] 异步的failure[ˈfeɪljə(r)] 失败的,不及格的random[ˈrændəm] 随机的block[blɒk] 区块儿total[ˈtəʊtl] 总共,总计execute[ˈeksɪkju:t] 执行entity[ˈentəti] 实体pair[peə(r)] 一副,一对range[reɪndʒ] 范围,射程manner[ˈmænə(r)] 方式current[ˈkʌrənt] 当前的,现在的Day06 单词filter[ˈfɪltə(r)] 过滤器,滤波器category[ˈkætəgəri] 类型,种类feature[ˈfi:tʃə(r)] 特征,特点extra[ˈekstrə] 额外的cycle[ˈsaɪkl] 循环,周期pause[pɔ:z] 暂停,中止resume[rɪ'zju:m] 继续destroy[dɪˈstrɔɪ] 摧毁,销毁entire[ɪnˈtaɪə(r)] 完整的,全部的foreground[ˈfɔ:graʊnd] 前台,前景navigate[ˈnævɪgeɪt] 航行,驾驶priority[praɪˈɒrəti] 优先级stack[stæk] 栈instance[ˈɪnstəns] 示例Day07 单词broadcast[ˈbrɔ:dkɑ:st]广播,电台receiver[rɪˈsi:və(r)] 接收器,接受者boot[bu:t] 引导,启动originate[əˈrɪdʒɪneɪt] 起源于,来自abort[əˈbɔ:t] 终止,使流产exclude[ɪkˈsklu:d]不包括,排除ordered[ˈɔ:dəd] 有顺序的,规则的register[ˈredʒɪstə(r)] 登记,注册service[ˈsɜ:vɪs] 服务,服侍foreground[ˈfɔ:graʊnd] 前景,前台process[ˈprəʊses] 处理,进程reset[ˌri:ˈset]重置rel ease[rɪˈli:s] 释放,发布prepare[prɪˈpeə(r)] 准备;预备bind[baɪnd] 绑定,捆绑remote[rɪˈməʊt] 远程的definition[ˌdefɪˈnɪʃn] 定义,规定idle[ˈaɪdl] 空闲ringing[ˈrɪŋɪŋ]响铃的recorder[rɪˈkɔ:də(r)] 录音机audio[ˈɔ:diəʊ] 音频的zygote[ˈzaɪgəʊt] 受精卵,结合子capture[ˈkæptʃə(r)] 俘获,夺取modify[ˈmɒdɪfaɪ] 修改Day09 单词provider[prəˈvaɪdə(r)] 提供者,供应者authority[ɔ:ˈθɒrəti] 权威match[mætʃ] 匹配,等价于resolver[rɪ'zɒlvə] 解析者,解决问题的人notification[ˌnəʊtɪfɪˈkeɪʃn] 通知,公布pending[ˈpendɪŋ]待定的,即将发生的identifier[aɪˈdentɪfaɪə(r)] 识别符,编号observer[əbˈzɜ:və(r)] 观察者export[ˈekspɔ:t] 输出behavior[bɪ'heɪvjə] 行为,态度explicitly[ɪk'splɪsɪtlɪ] 明确的multimedia[ˌmʌltiˈmi:diə] 多媒体bitmap[ˈbɪtmæp] 位图bounds[baʊndz] 范围options[ˈɒpʃn] 选项display[dɪˈspl eɪ] 显示器,屏幕ratio[ˈreɪʃiəʊ] 比例canvas[ˈkænvəs] 油画,画布paint[peɪnt] 颜料,画笔matrix[ˈmeɪtrɪks] 矩阵scale[skeɪl] 规模,比例translate[trænsˈl eɪt] 转化,移动rotate[rəʊˈteɪt] 旋转pixel[ˈpɪksl] 像素scan[skæn] 扫描,浏览raw[rɔ:] 未加工的surface[ˈsɜ:fɪs] 表面,外观holder[ˈhəʊl də(r)] 持有者sensor[ˈsensə(r)] 传感器accel erometer[əkˌseləˈrɒmɪtə(r)]加速度proximity[prɒkˈsɪməti] 亲近,接近accuracy[ˈækjərəsi] 精确性,准确性Day11 单词fragment[ˈfrægmənt] 片段,碎片replace[rɪˈpl eɪs] 替换attach[əˈtætʃ] 附上,贴上detach[dɪˈtætʃ] 分开,分离repeat[rɪˈpi:t] 重复reverse[rɪˈvɜ:s] 反转,倒退infinite[ˈɪnfɪnət] 无限的,无穷的pivot[ˈpɪvət] 中心点,轴心点sequentially[sɪ'kwenʃəlɪ] 继续的interpolater['ɪntɜ:pəl eɪtər] 插入器,插值器。

《Android-Jetpack开发-原理解析与应用实战》读书笔记思维导图

《Android-Jetpack开发-原理解析与应用实战》读书笔记思维导图

3 12.3
Compose基础 组件的使用
4 12.4
Compose列表 组件的使用
5
12.5 小结
读书笔记
谢谢观看
8.1 什么是 1
依赖注入
8.2 基于2Βιβλιοθήκη Dagger看Hilt
3 8.3 Hilt的
基本使用
4 8.4 原理小
课堂
5
8.5 小结
第9章 优雅地实现异步任务: Kotlin...
9.1 什么是 1
协程
9.2 使用协 2
程优雅地实现 异步任务
3
9.3 Kotlin 数据流
4 9.4 原理小
课堂
5
9.5 小结
11.2 组件化结构 的设计与搭建
11.3 查询城市数 据
11.4 查询城市核 酸检测机构
11.6 查询健康 出行政策
11.5 查询疫情 风险等级地区
11.7 小结
第12章 体验最新响应式编程 技术Jetp...
12.1 什么是 1
Jetpack Comp...
12.2
2
Compose的基
础知识
04
6.4 DataBind ing与 View...
06
6.6 小结
05
6.5 原理 小课堂
第7章 官方数据库框架之Room
7.1
1
Android数据
库ORM框架
7.2 使用
2
Room实现登
录账号列表功

3 7.3 Room数
据库的升级
4 7.4 原理小
课堂
5
7.5 小结
第8章 减少手动依赖,探究 Hilt

AndroidcanvasdrawBitmap方法详解及实例

AndroidcanvasdrawBitmap方法详解及实例

AndroidcanvasdrawBitmap⽅法详解及实例Android canvas drawBitmap⽅法详解及实例之前⾃⼰在⾃定义view,⽤到canvas.drawBitmap(Bitmap, SrcRect, DesRect, Paint)的时候,对其中的第2和3个参数的含义含糊不清。

看源码函数也没理解,然后看了⼀些其他的博客加上⾃⼰的理解,整理如下。

⾸先,我们看⼀张图⽚,今天就要绘制这张图⽚。

然后将图⽚⽤红⾊的线条分成4个部分,如下:我们⾃定义⼀个View,代码如下:public class PoterDuffLoadingView extends View {private Resources mResources;private Paint mBitPaint;private Bitmap mBitmap;private int mTotalWidth, mTotalHeight;private Bitmap girlBitmap;private int girlBitWidth , girlBitHeight;private Rect girlSrcRect , girlDesRect;public PoterDuffLoadingView(Context context) {super(context);mResources = getResources();initBitmap();}private void initBitmap() {//美⼥图⽚的宽和⾼girlBitmap = ((BitmapDrawable)mResources.getDrawable(R.drawable.a1)).getBitmap();girlBitWidth = girlBitmap.getWidth();girlBitHeight = girlBitmap.getHeight();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(girlBitmap, girlSrcRect, girlDesRect, null);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {Log.d("xxxxxx", "onSizeChanged , w = "+w+" , h = "+h+" , mBitWidth = "+mBitWidth+" , mBitHeight = "+mBitHeight);super.onSizeChanged(w, h, oldw, oldh);mTotalWidth = w;mTotalHeight = h;girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight);girlDesRect = new Rect(0, 0, girlBitWidth, girlBitHeight);}}其中:girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight);表⽰要画的图就是整个图⽚的⼤⼩。

androidcanvas的drawBitmap

androidcanvas的drawBitmap

androidcanvas的drawBitmap1、基本的绘制图⽚⽅法//Bitmap:图⽚对象,left:偏移左边的位置,top:偏移顶部的位置drawBitmap(Bitmap bitmap, float left, float top, Paint paint)2、对图⽚剪接和限定显⽰区域第⼀个Rect 代表要绘制的bitmap 区域,第⼆个 Rect 代表的是要将bitmap 绘制在屏幕的什么地⽅drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint);Rect src: 是对图⽚进⾏裁截,若是空null则显⽰整个图⽚RectF dst:是图⽚在Canvas画布中显⽰的区域,⼤于src则把src的裁截区放⼤,⼩于src则把src的裁截区缩⼩。

此时我先定义两个Rect,mSrcRect 取值为整个Bitmap 区域,mDestRect 取值为view左上⽅和bitmap同样⼤⼩;[html]1. private Rect mSrcRect, mDestRect;[html]1. mSrcRect = new Rect(0, 0, mBitWidth, mBitHeight);2. mDestRect = new Rect(0, 0, mBitWidth, mBitHeight);在onDraw ⾥绘制该位图:[html]1. canvas.drawBitmap(mBitmap, mSrcRect, mDestRect, mBitPaint);画在左上⽅似乎缺乏美感,我们把美⼥画在view的中⼼,没错,我们只需要改变mDestRect:[html]1. // 计算左边位置2. int left = mHalfWidth - mBitWidth / 2;3. // 计算上边位置4. int top = mHalfHeight - mBitHeight / 2;5. mDestRect = new Rect(left, top, left + mBitWidth, top + mBitHeight);位置计算的时候,只需要注意在android屏幕坐标系⾥,左上⾓的位置是(0,0),往右往下为正,此时效果如下:。

Android详细学习笔记第一季

Android详细学习笔记第一季

一、Android学习第一天——环境搭建Android 开发环境的搭建环境搭建需要①Android SDK ②JDK ③eclipse环境搭建开始:㈠将Android SDK与JDK解压,最好路径中不要出现汉字,然后配置环境变量,方便命令行操作㈡为eclipse(3.4.1)安装开发Android插件——Android ADTHelp-->Install New Software输入:https:///android/eclipse便会自动检测出所需要安装的东西,点击install即可。

㈢重启eclipse,进行Android SDK的配置。

Windows-->Preferences-->Android找到你解压的Android SDK的路径即可。

㈣新建一个Android Project来验证平台是否搭建成功。

注:我上面步骤走下来之后发现我在运行程序时,没有Android Virtual Devices(AVD)的选项。

这时可以在Windows-->Android SDK Manager中找到你所需要安装版本,进行安装。

搭建过程还是比较顺利,加油~二、Android学习第二天——初识Activity昨天程序搭建成功以后,就可以开发跟运行Android应用程序了,因为Activity是开发中不可或缺的组成部分,所以要对Activity有所认识。

以下两点是需要注意的:(个人总结)1.凡是覆写得方法,在方法体中的第一行一定是super.XXX(),一定要先调用父类里的相应方法做必要的事情,再根据自己的需求去写其他的代码。

2.如果是从头学习安卓开发,不一定要开发最新的版本,可以在较低版本(2.3.3)下进行开发,然后在高版本(4.0)下进行编译与运行,这样可以提高代码的适应能力,可以兼容高级版本。

下面对我今天的学习进行个小结:首先Android的四个重要部分①Activity——形象点就是一个应用程序的门面,我们在手机上看到的图形界面②Intent——它就像一个搬用工,用于Activity之间传递数据,就像请求③Service——这个是不可见的,是为整个应用程序提供服务支持的底层④Content Provider——为应用程序提供数据的接口上面的描述我自己感觉也比较抽象,今天专门研究了Activity,终于守得云开见月明:首先进行以下学习之前需要对Android的工程项目目录有一个总体的了解:自己总结:src下是我们自己写得程序;gen下是我们创建程序时系统自动生成的,切忌勿修改assets是一个资源库,与res的区别是不会自动在R.java中自动生成idres是一个资源库,与assets不同的是,每增加一个资源(图片等),会自动在R.java 中生成对应的idlayout用于存放布局文件,用来控制Activity的显示格局string.xml中存放的一个一个键值对,Activity可以对其进行提取AndroidManifest.xml是系统比较重要的一个文件,存放Activity的注册信息,每生成一个Activity就应该在这里注册一个。

Andriod 绘制图形 、Canvas、Paint、Color、Typeface、Path、RectF、Point、绘制几何图形

Andriod 绘制图形 、Canvas、Paint、Color、Typeface、Path、RectF、Point、绘制几何图形

Andriod绘制图形android.graphics包是核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理。

这个包中提供了很多类,下面我们就看一下这个包中主要的几个类。

一、Canvas类android.graphics.CanvasCanvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像。

一般我们用android来绘画的时候,需要四个组成部分:1、位图:包含像素2、Canvas画板:包含绘画内容,写入位图3、初始图形:如Rect、Bitmap、text等4、Paint:用来描述上面初始图形的颜色和类型等Canvas类提供了三个构造方法:Public Canvas();构造一个默认无参的Canvas对象Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas对象Public Canvas(GL gl);根据一个GL来构造一个对象下面我们来了解一下Canvas类提供的方法:在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画板中画图形,比如可以向Canvas中画位图,给图形填充颜色等。

比如方法:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)画弧形drawCircle(float cx, float cy, float radius, Paint paint)画圆形Canvas类提供的方法比较多,在此我们不一一赘述,在后面的内容中,我将给大家举几个实际的应用程序例子来演示Canvas类的使用方法。

二、Paint类android.graphics.PaintPaint类包含有用来画几何图形、文本、位图的类型和颜色等信息,如果把Canvas类看作是画板,那我们可以把Paint类看做是画笔,可以根据需要画出不同颜色和样式的图形、文本等内容。

android的知识点总结

android的知识点总结

android的知识点总结作为目前最受欢迎的移动操作系统之一,Android在智能手机、平板电脑、智能手表等设备上得到了广泛的应用。

针对Android的开发和应用有很多的知识点需要掌握,下面就对Android的一些知识点进行总结。

一、Android基础知识1. Android系统架构Android系统架构主要由四个部分组成,它们分别是Linux内核、库、应用框架和应用程序。

Linux内核是整个系统的核心,负责系统的底层管理工作,比如内存管理、进程管理、文件系统和设备驱动等。

库是一系列的核心功能模块,负责提供系统的核心功能。

应用框架提供了丰富的API供应用程序开发,而应用程序是最终的软件产品,它们运行在应用框架之上。

2. Android应用程序的结构Android应用程序的结构主要由四个部分组成,它们分别是Activity、Service、Content Provider和Broadcast Receiver。

Activity是用户界面的呈现单元,负责与用户进行交互。

Service是一种后台运行的组件,负责执行耗时操作。

Content Provider提供了统一的数据访问接口,使得应用程序可以共享数据。

Broadcast Receiver负责接收来自系统或其他应用程序的广播消息。

3. Android的四大组件Android的四大组件指的是Activity、Service、Content Provider和Broadcast Receiver。

它们是Android系统中最重要的四个组件,通过这些组件可以构建各种不同类型的应用程序。

4. Android应用程序的生命周期Android应用程序的生命周期是指从应用程序启动到关闭的整个过程。

它主要包括活动状态、暂停状态、停止状态和销毁状态四个阶段。

在应用程序的整个生命周期中,开发人员可以通过重写对应的生命周期方法,来控制应用程序的行为。

5. Android应用程序的布局Android应用程序的布局主要由若干的View组件组成,它们可以通过代码或XML文件进行描述。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开发者学习笔记——View&CanvasBitMap、View以及Canvas是我们Ophone程序中常用到的类。

本日以feisky的学习笔记呈现,通过实例讲解View&Canvas等等。

1. 从资源中获取位图可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。

当然,首先需要获取资源:Resources res=getResources();使用BitmapDrawable获取位图使用BitmapDrawable (InputStream is)构造一个BitmapDrawable;使用BitmapDrawable类的getBitmap()获取得到位图;// 读取InputStream并得到位图InputStream is=res.openRawResource(R.drawable.pic180); BitmapDrawable bmpDraw=new BitmapDrawable(is);Bitmap bmp=bmpDraw.getBitmap();或者采用下面的方式:BitmapDrawablebmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180);Bitmap bmp=bmpDraw.getBitmap();使用BitmapFactory获取位图(Creates Bitmap objects from various sources, including files, streams, and byte-arrays.)使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。

以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),和bmp(Android SDK Support Media Format)。

2. 获取位图的信息要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等,获取得到Bitmap 就迎刃而解了,这些信息在Bitmap的手册中,这里只是辅助说明以下2点:在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。

3. 显示位图显示位图可以使用核心类Canvas,通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。

当然,也可以通过BitmapDrawable 将位图显示到View中。

转换为BitmapDrawable对象显示位图// 获取位图Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180);// 转换为BitmapDrawable对象BitmapDrawable bmpDraw=new BitmapDrawable(bmp);// 显示位图ImageView iv2 = (ImageView)findViewById(R.id.ImageView02);iv2.setImageDrawable(bmpDraw);使用Canvas类显示位图这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new Panel(this));}class Panel extends View{public Panel(Context context) {super(context);}public void onDraw(Canvas canvas){Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pic180);canvas.drawColor(Color.BLACK);canvas.drawBitmap(bmp, 10, 10, null);}}}4. 位图缩放(1)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。

(2)在原有位图的基础上,缩放原位图,创建一个新的位图:CreateBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)(3)借助Canvas的scale(float sx, float sy) (Preconcat the current matrix with the specified scale.),不过要注意此时整个画布都缩放了。

(4)借助Matrix:Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pic180);Matrix matrix=new Matrix();matrix.postScale(0.2f, 0.2f);Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);canvas.drawColor(Color.BLACK);canvas.drawBitmap(dstbmp, 10, 10, null);5.位图旋转同样,位图的旋转也可以借助Matrix或者Canvas来实现。

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.p ic180);Matrix matrix=new Matrix();matrix.postScale(0.8f, 0.8f);matrix.postRotate(45);Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);canvas.drawColor(Color.BLACK);canvas.drawBitmap(dstbmp, 10, 10, null);旋转效果:6.图片水印的生成方法生成水印的过程。

其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。

/*** create the bitmap from a byte array** @param src the bitmap object you want proecss* @param watermark the water mark above the src* @return return a bitmap object ,if paramter's length is 0,return null*/private Bitmap createBitmap( Bitmap src, Bitmap watermark ){String tag = "createBitmap";Log.d( tag, "create a new bitmap" );if( src == null ){return null;}int w = src.getWidth();int h = src.getHeight();int ww = watermark.getWidth();int wh = watermark.getHeight();//create the new blank bitmapBitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图Canvas cv = new Canvas( newb );//draw src into cv.drawBitmap( src, 0, 0, null );//在0,0坐标开始画入src//draw watermark intocv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印//save all clipcv.save( Canvas.ALL_SAVE_FLAG );//保存//storecv.restore();//存储return newb;}6.图片水印的生成方法生成水印的过程。

其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。

/*** create the bitmap from a byte array** @param src the bitmap object you want proecss* @param watermark the water mark above the src* @return return a bitmap object ,if paramter's length is 0,return null*/private Bitmap createBitmap( Bitmap src, Bitmap watermark ){String tag = "createBitmap";Log.d( tag, "create a new bitmap" );if( src == null ){return null;}int w = src.getWidth();int h = src.getHeight();int ww = watermark.getWidth();int wh = watermark.getHeight();//create the new blank bitmapBitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图Canvas cv = new Canvas( newb );//draw src into cv.drawBitmap( src, 0, 0, null );//在0,0坐标开始画入src//draw watermark intocv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印//save all clipcv.save( Canvas.ALL_SAVE_FLAG );//保存//storecv.restore();//存储return newb;}7.Canvas的save和restoreonDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。

相关文档
最新文档