画图学习•Android画图学习总结(一)——类的简介•Android画图学习总结(二)——Bitmap•Android画图学习总结(三)——Drawable•Android画图学习总结(四)——Animation(上)•Android画图学习总结(四)——Animation(中)•Android画图学习总结(四)——Animation(下)•Android画图学习总结(五)——PaintAndroid画图学习总结(一)——类的简介学习Android有一段时间了,看完了AndroidSDK中的大部分文档,但是始终感觉自己还缺少很多,后来发现,AndroidSDK中只是介绍了Google自己开发的那一部分如何使用,Android中引用至Java的部分如何使用却没有说明。当然这也不是Google的职责,但是这对我们C++程序员来说的确是缺少了很多,在这里我们将对Google“缺少的部分”并结合AndroidSDK中Reference说明来详细介绍,并不断的补充完善。首先,如何获取res中的资源数据包package:android.content.res主要类:ResourcesAndroidSDK中的简介:Classforaccessinganapplication’sresources.Classforaccessinganapplication’sresources.(accessiblethroughgetAssets())andprovidesahigher-levelAPIforgettingtypeddatafromtheassets.其主要接口按照功能,划分为以下三部分:getXXXX()例如:intgetColor(intid)DrawablegetDrawable(intid)StringgetString(intid)直接获取res中存放的资源InputStreamopenRawResource(intid)获取资源的数据流,读取资源数据voidparseBundleExtras(XmlResourceParserparser,BundleoutBundle)从XML文件中获取数据Resource为每种资源提供了相应的接口来获取这种资源,除了可以直接获取资源外,还额外提供了以数据流的方式获取资源,这在以后的应用程序开发中会经常使用,那么如何获取Resources了,如下:Resourcesr=this.getContext().getResources();其次,如何获取资源中的画图对象数据包package:android.graphics.drawable主要类:DrawableAndroidSDK中的简介:ADrawableisageneralabstractionfor“somethingthatcanbedrawn.”MostoftenyouwilldealwithDrawableasthetypeofresourceretrievedfordrawingthingstothescreen;theDrawableclassprovidesageneric看了以上简介,发现Drawable是个virtualclass,具体如何画图,需要具体分析Drawable的子类,例如:BitmapDrawableAndroidSDK中的简介:ADrawablethatwrapsabitmapandcanbetiled,stretched,oraligned.YoucancreateaBitmapDrawablefromafilepath,aninputstream,throughXMLinflation,orfromaBitmapobject.ItcanbedefinedinanXMLfilewiththebitmapelement.其主要接口如下:BitmapDrawable()BitmapDrawable(Bitmapbitmap)BitmapDrawable(Stringfilepath)BitmapDrawable(InputStreamis)voiddraw(Canvascanvas)Drawinitsbounds(setviasetBounds)respectingoptionaleffectssuchasalpha(setviasetAlpha)andcolorfilter(setviasetColorFilter).finalBitmapgetBitmap()finalPaintgetPaint()Drawable是个抽象类,在BitmapDrawable中我们就看到位图的具体操作,在仔细看下BitmapDrawable的构造函数,我们就会发现与Resource中的openRawResource()接口是相对应的,就可以通过以下方法来获取位图:Resourcesr=this.getContext().getResources();Inputstreamis=r.openRawResource(R.drawable.my_background_image);BitmapDrawablebmpDraw=newBitmapDrawable(is);=bmpDraw.getBitmap();关于Drawable深入的学习与理解,请阅读Android画图学习总结(三)——Drawable然后,看几个常用的辅助类1.Paint数据包package:android.graphicsAndroidSDK中的简介:ThePaintclassholdsthestyleandcolorinformationabouthowtodrawgeometries,textandbitmaps.主要就是定义:画刷的样式,画笔的大小/颜色等。2.Typeface数据包package:android.graphicsAndroidSDK中的简介:TheTypefaceclassspecifiesthetypefaceandintrinsicstyleofafont.主要就是定义:字体。最后,核心类显示资源数据包package:android.graphics主要类:CanvasAndroidSDK中的简介:TheCanvasclassholdsthe“draw”calls.Todrawsomething,youneed4basiccomponents:ABitmaptoholdthepixels,aCanvastohostthedrawcalls(writingintothebitmap),adrawingprimitive(e.g.Rect,Path,text,Bitmap),andapaint(todescribethecolorsandstylesforthedrawing).按照结构的功能,将主要接口分为以下3部分:booleanclipXXXX()Region区域操作:DIFFERENCE()画图函数voidrotate()voidscale()voidskew()voidtranslate()画布操作函数Region在这里需要特殊说明下:Region就是一个区域,也就是画布(Canvas)中的有效区域,在无效区域上draw,对画布没有任何改变。总结说明在写代码前,必须先仔细看下这几个主要的类,在这里我也只是把SDK中的介绍稍微总结下,它代替不了你对SDK的详细阅读,毕竟SDK是最详细的说明文档,在后续篇幅中再深入详细的介绍。相关文章•Activity、Intent深入解析•Android实现联网(一)——package说明•Android画图学习总结(五)——Paint带给我们的新体验•Android画图学习总结(四)——Animation(下)•Android画图学习总结(四)——Animation(中)Android画图学习总结(二)——Bitmap通过前一篇的学习,对Android画图核心部分有了一定的了解,后面篇幅,我们将详细介绍Android中的各种画图对象的使用,首先介绍我们最常用的Bitmap(位图)。位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。按照对位图的操作,分为以下几个功能分别介绍:1.从资源中获取位图2.获取位图的信息3.显示位图4.位图缩放5.位图旋转1.从资源中获取位图在前一篇幅介绍了:先获取Resource,然后可以通过资源ID获取Drawable,也可以通过资源ID获取资源文件的数据流。使用第一种方法比较容易,下面详细说明第二种方法。通过Resource的函数:InputStreamopenRawResource(intid)获取得到资源文件的数据流后,也可以通过2种方法来获取Bitmap,如下:使用BitmapDrawable(ADrawablethatwrapsabitmapandcanbetiled,stretched,oraligned.)(InputStreamis)构造一个BitmapDrawable;2.使用BitmapDrawable类的getBitmap()获取得到位图;BitmapDrawable也提供了显示位图等操作使用BitmapFactory(CreatesBitmapobjectsfromvarioussources,includingfiles,streams,andbyte-arrays.)1.使用BitmapFactory类decodeStream(InputStreamis)解码位图资源,获取位图BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。以上方法在编程的时候可以自由选择,在AndroidSDK中说明可以支持的图片格式如下:png(preferred),jpg(acceptable),gif(discouraged),虽然bmp格式没有明确说明,但是在AndroidSDKSupportMediaFormat中是明确说明了。2.获取位图的信息要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的函数中可以轻松获取到。AndroidSDK中对Bitmap有详细说明,阅读起来也比较容易,不在此详细说明,这里只是辅助说明以下2点:•在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;•Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补