您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > Android画图学习总结
Android画图学习总结(一)——类的简介首先,如何获取res中的资源数据包package:android.content.res主要类:ResourcesAndroidSDK中的简介:Classforaccessinganapplication’sresources.Classforaccessinganapplication’sresources.Thissitsontopoftheassetmanageroftheapplication(accessiblethroughgetAssets())andprovidesahigher-levelAPIforgettingtypeddatafromtheassets.其主要接口按照功能,划分为以下三部分:1.getXXXX()例如:intgetColor(intid)DrawablegetDrawable(intid)StringgetString(intid)直接获取res中存放的资源2.InputStreamopenRawResource(intid)获取资源的数据流,读取资源数据3.voidparseBundleExtras(XmlResourceParserparser,BundleoutBundle)从XML文件中获取数据Resource为每种资源提供了相应的接口来获取这种资源,除了可以直接获取资源外,还额外提供了以数据流的方式获取资源,这在以后的应用程序开发中会经常使用,那么如何获取Resources了,如下:Resourcesr=this.getContext().getResources();其次,如何获取资源中的画图对象数据包package:android.graphics.drawable主要类:DrawableAndroidSDK中的简介:ADrawableisageneralabstractionfor“somethingthatcanbedrawn.”MostoftenyouwilldealwithDrawableasthetypeofresourceretrievedfordrawingthingstothescreen;theDrawableclassprovidesagenericAPIfordealingwithanunderlyingvisualresourcethatmaytakeavarietyofforms.看了以上简介,发现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);Bitmapbmp=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区域操作:DIFFERENCEINTERSECTREPLACEREVERSE_DIFFERENCEUNIONXORvoiddrawXXXX()画图函数voidrotate()voidscale()voidskew()voidtranslate()画布操作函数Region在这里需要特殊说明下:Region就是一个区域,也就是画布(Canvas)中的有效区域,在无效区域上draw,对画布没有任何改变。总结说明在写代码前,必须先仔细看下这几个主要的类,在这里我也只是把SDK中的介绍稍微总结下,它代替不了你对SDK的详细阅读,毕竟SDK是最详细的说明文档,在后续篇幅中再深入详细的介绍。Android画图学习总结(二)——Bitmap通过前一篇的学习,对Android画图核心部分有了一定的了解,后面篇幅,我们将详细介绍Android中的各种画图对象的使用,首先介绍我们最常用的Bitmap(位图)。位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。按照对位图的操作,分为以下几个功能分别介绍:1.从资源中获取位图2.获取位图的信息3.显示位图4.位图缩放5.位图旋转1.从资源中获取位图在前一篇幅介绍了:先获取Resource,然后可以通过资源ID获取Drawable,也可以通过资源ID获取资源文件的数据流。使用第一种方法比较容易,下面详细说明第二种方法。通过Resource的函数:InputStreamopenRawResource(intid)获取得到资源文件的数据流后,也可以通过2种方法来获取Bitmap,如下:使用BitmapDrawable(ADrawablethatwrapsabitmapandcanbetiled,stretched,oraligned.)1.使用BitmapDrawable(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开发人员自己补充了。3.显示位图显示位图需要使用核心类Canvas,可以直接通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。具体如何显示位图不是主要的问题,主要问题是如何获取Canvas,参考Snake中的方法,做了个简单的例子testView,提供给大家下载。testView例子介绍:其包含2个类testActivity,testView;testActivity继承与Activity,testView继承与View。这个例子就是将testView直接作为testActivity的窗口,这样我们就可以直接在testView画图了。具体如何实现的,请大家参考testActivity的onCreate()中的代码,以及layout\main.xml中的设置。在testView的onDraw()直接画图,结果在例子程序运行后就可以直接在界面上显示了。4.位图缩放位图的缩放,在AndroidSDK中提供了2种方法:*将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmapbitmap,Rectsrc,Rectdst,Paintpaint)*在原有位图的基础上,缩放原位图,创建一个新的位图:createBitmap(Bitmapsource,intx,inty,intwidth,intheight,Matrixm,booleanfilter)第2种方法一看就明白,对于第一种方法,举个简单的例子来说明:intw=320,h=240;StringmstrTitle=“感受Android带给我们的新体验”;BitmapmbmpTest=Bitmap.createBitmap(w,h,Config.ARGB_8888);CanvascanvasTemp=newCanvas(mbmpTest);canvasTemp.drawColor(Color.WHITE);Paintp=newPain
本文标题:Android画图学习总结
链接地址:https://www.777doc.com/doc-4916933 .html