canvas教程

Android画图学习免费下载

字号+ 作者:H5之家 来源:H5之家 2017-04-27 11:01 我要评论( )

Android画图学习,Android画图学习免费下载:wwwmoandroidcommoAndroid感受Android带给我们的新体验Android画图学习Android画图学习总结(一)类的简介Andro

Android画图学习.pdf Android画图学习.pdf

简介:Android画图学习

感受Android带给我们的新体验Android画图学习Android画图学习总结(一)——类的简介Android画图学习总结(二)——BitmapAndroid画图学习总结(三)——DrawableAndroid画图学习总结(四)——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.感受Android带给我们的新体验Thissitsontopoftheassetmanageroftheapplication(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感受Android带给我们的新体验APIfordealingwithanunderlyingvisualresourcethatmaytakeavarietyofforms.看了以上简介,发现Drawable是个virtualclass,具体如何画图,需要具体分析Drawable的子类,例如:BitmapDrawableAndroidSDK中的简介:ADrawablethatwrapsabitmapandcanbetiled,stretched,oraligned.YoucancreateaBitmapDrawablefromafilepath,aninputstream,throughXMLinflation,orfromaBitmapobject.ItcanbedefinedinanXMLfilewiththe<bitmap>element.其主要接口如下: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);感受Android带给我们的新体验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区域操作:DIFFERENCE感受Android带给我们的新体验INTERSECTREPLACEREVERSE_DIFFERENCEUNIONXORvoiddrawXXXX()画图函数voidrotate()voidscale()voidskew()voidtranslate()画布操作函数Region在这里需要特殊说明下:Region就是一个区域,也就是画布(Canvas)中的有效区域,在无效区域上draw,对画布没有任何改变。总结说明在写代码前,必须先仔细看下这几个主要的类,在这里我也只是把SDK中的介绍稍微总结下,它代替不了你对SDK的详细阅读,毕竟SDK是最详细的说明文档,在后续篇幅中再深入详细的介绍。相关文章Activity、Intent深入解析Android实现联网(一)——package说明Android画图学习总结(五)——Paint感受Android带给我们的新体验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.)感受Android带给我们的新体验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开发人员自己补充了。感受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);感受Android带给我们的新体验canvasTemp.drawColor(Color.WHITE);Paintp=newPaint();StringfamilyName=“宋体”;Typefacefont=Typeface.create(familyName,Typeface.BOLD);p.setColor(Color.RED);p.setTypeface(font);p.setTextSize(22);canvasTemp.drawText(mstrTitle,0,100,p);显示位图mbmpTest,就会发现一张320240、白色背景、红色“宋体”文字的图片,如下:感受Android带给我们的新体验感受Android带给我们的新体验这个例子没有位图缩放的任何操作?的确,但是这是我在想如何写个简单的位图缩放的小程序时,最先想到的。看完这个例子,我想你就应该明白如何实现位图的缩放了。不要小瞧了这个例子,虽然与位图缩放关系不大,但是却可以让你理解位图缩放的本质:将原始位图按照需求显示出来,就创造了一张新的位图。5.位图旋转位图的旋转,离不开Matrix。Matrix在线性代数中都学习过,AndroidSDK提供了Matrix类,可以通过各种接口来设置矩阵。结合上面的例子程序,将位图缩放例子程序在显示位图的时候前,增加位图旋转功能,修改代码如下:Matrixmatrix=newMatrix();//matrix.postScale(0.5f,0.5f);matrix.setRotate(90,120,130);canvas.drawBitmap(mbmpTest,matrix,mPaint);旋转后的位图显示如下:感受Android带给我们的新体验除了这种方法之外,我们也可以在使用Bitmap提供的函数如下:感受Android带给我们的新体验publicstaticBitmapcreateBitmap(Bitmapsource,intx,inty,intwidth,intheight,Matrixm,booleanfilter),在原有位图旋转的基础上,创建新位图。总结说明对位图的操作,结合AndroidSDK中的类,详细的介绍完了。最后还需要强调的是:这篇文章只是对AndroidSDK中代码阅读分析,它代替不了你阅读AndroidSDK,深入的学习还是要仔细的阅读AndroidSDK。相关文章Android画图学习总结(五)——PaintAndroid画图学习总结(四)——Animation(下)Android画图学习总结(四)——Animation(中)Android画图学习总结(四)——Animation(上)Android画图学习总结(三)——DrawableAndroid画图学习总结(三)——DrawableAndroidSDK提供了一个强大的类Drawable,Drawable这个抽象类到底代表了什么,如何使用?Drawable是个很抽象的概念,通过简单的例子程序来学习它,理解它。先看个简单的例子,使用Drawable的子类ShapeDrawable来画图,如下:publicclasstestViewextendsView{privateShapeDrawablemDrawable;publictestView(Contextcontext){感受Android带给我们的新体验super(context);intx=10;inty=10;intwidth=300;intheight=50;mDrawable=newShapeDrawable(newOvalShape());mDrawable.getPaint().setColor(0xff74AC23);mDrawable.setBounds(x,y,x+width,y+height);}protectedvoidonDraw(Canvascanvas)super.onDraw(canvas);canvas.drawColor(Color.WHITE);//画白色背景mDrawable.draw(canvas);}}程序的运行结果,显示如下:感受Android带给我们的新体验简要解析:1.创建一个OvalShape(一个椭圆);2.使用刚创建的OvalShape构造一个ShapeDrawable对象mDrawable3.设置mDrawable的颜色;4.设置mDrawable的大小;5.将mDrawable画在testView的画布上;感受Android带给我们的新体验这个简单的例子可以帮我们理解什么是Drawable,Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象,就可以将这个可画对象当作一块“画布(Canvas)”,在其上面操作可画对象,并最终将这种可画对象显示在画布上,有点类似于“内存画布“。上面只是一个简单的使用Drawable的例子,完全没有体现出Drawable的强大功能。AndroidSDK中说明了Drawable主要的作用是:在XML中定义各种动画,然后把XML当作Drawable资源来读取,通过Drawable显示动画。下面举个使用TransitionDrawable的例子,创建一个Android工程,然后再这个工程的基础上修改,修改过程如下:1、去掉layout/main.xml中的TextView,增加ImagView,如下:<ImageViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:tint=”#55ff0000″android:src=”@drawable/my_image”/>2、创建一个XML文件,命名为expand_collapse.xml,内容如下:<?xmlversion=”1.0″encoding=”UTF-8″?><transitionxmlns:android=””><itemandroid:drawable=”@drawable/image_expand”/><itemandroid:drawable=”@drawable/image_collapse”/></transition>需要3张png图片,存放到res\drawable目录下,3张图片分别命名为:my_image.png、image_expand.png、image_collapse.png。3、修改Activity中的代码,内容如下:LinearLayoutmLinearLayout;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);感受Android带给我们的新体验mLinearLayout=newLinearLayout(this);ImageViewi=newImageView(this);i.setAdjustViewBounds(true);i.setLayoutParams(newGallery.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));mLinearLayout.addView(i);setContentView(mLinearLayout);Resourcesres=getResources();TransitionDrawabletransition=(TransitionDrawable)res.getDrawable(R.drawable.expand_collapse);i.setImageDrawable(transition);transition.startTransition(10000);}4、如果修改的没有错误,运行程序,结果显示如下:初始图片过渡中的图片感受Android带给我们的新体验最后的图片屏幕上动画显示的是:从图片image_expand.png过渡到image_collapse.png,也就是我们在expand_collapse.xml中定义的一个transition动画。看完这个例子,你对Drawable的理解是否又深入些?这里提供这个程序的源代码,供大家下载,可以在这个例子的基础上去体会其他的Drawable,来加深对Drawable的理解。总结说明通过以上2个例子程序,相信对Drawable会有一定的认识了,在以后的篇幅中会介绍更多的例子,更加深入的学习和理解Drawable。具体还有哪些Drawable,大家到AndroidSDK去深入学习吧。相关文章Android画图学习总结(五)——PaintAndroid画图学习总结(四)——Animation(下)Android画图学习总结(四)——Animation(中)Android画图学习总结(四)——Animation(上)Android画图学习总结(二)——Bitmap感受Android带给我们的新体验Android画图学习总结(四)——Animation(上)随着对Drewable的深入了解,发现了Drawable更加强大的功能:显示Animation。AndroidSDK介绍了2种Animation:TweenAnimation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果FrameAnimation:顺序播放事先做好的图像,跟电影类似在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的帮助。Animation是以XML格式定义的,定义好的XML文件存放在res\anim中。由于TweenAnimation与FrameAnimation的定义、使用都有很大的差异,我们将分开介绍,本篇幅中介绍TweenAnimation的定义与使用,后续篇幅再详细介绍FrameAnimation。按照XML文档的结构【父节点,子节点,属性】来介绍TweenAnimation,其由4种类型:Alpha:渐变透明度动画效果Scale:渐变尺寸伸缩动画效果Translate:画面转换位置移动动画效果Rotate:画面转换位置移动动画效果在介绍以上4种类型前,先介绍TweenAnimation共同的节点属性,关于节点的命名原则,请阅读AndroidManifest.xml文件结构说明。表一属性[类型]功能Duration[long]属性为动画持续时间时间以毫秒为单位fillAfter[boolean]当设置为true,该动画转化在动画结束后被应用fillBefore[boolean]当设置为true,该动画转化在动画开始前被应用感受Android带给我们的新体验interpolator指定一个动画的插入器有一些常见的插入器accelerate_decelerate_interpolator加速-减速动画插入器accelerate_interpolator加速-动画插入器decelerate_interpolator减速-动画插入器其他的属于特定的动画效果repeatCount[int]动画的重复次数RepeatMode[int]定义重复的行为1:重新开始2:playsbackwardstartOffset[long]动画之间的时间间隔,从上次动画停多少时间开始执行下个动画zAdjustment[int]定义动画的ZOrder的改变0:保持ZOrder不变1:保持在最上层-1:保持在最下层看了以上节点,大家是不是都想开始定义动画了。下面我们就开始结合具体的例子,介绍4种类型各自特有的节点元素。表二XML节点功能说明alpha渐变透明度动画效果<alphaandroid:fromAlpha=”0.1″android:toAlpha=”1.0″android:duration=”3000″/>fromAlpha属性为动画起始时透明度0.0表示完全透明感受Android带给我们的新体验toAlpha属性为动画结束时透明度1.0表示完全不透明以上值取0.0-1.0之间的float数据类型的数字表三scale渐变尺寸伸缩动画效果<scaleandroid:interpolator=“@android:anim/accelerate_decelerate_interpolator”android:fromXScale=”0.0″android:toXScale=”1.4″android:fromYScale=”0.0″android:toYScale=”1.4″android:pivotX=”50%”android:pivotY=”50%”android:fillAfter=”false”android:startOffset=“700”android:duration=”700″android:repeatCount=”10″/>fromXScale[float]fromYScale[float]为动画起始时,X、Y坐标上的伸缩尺寸0.0表示收缩到没有1.0表示正常无伸缩值小于1.0表示收缩值大于1.0表示放大toXScale[float]toYScale[float]为动画结束时,X、Y坐标上的伸缩尺寸pivotX[float]pivotY[float]为动画相对于物件的X、Y坐标的开始位置属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置表四translate画面转换位置移动动画效果<translate感受Android带给我们的新体验android:fromXDelta=”30″android:toXDelta=”-80″android:fromYDelta=”30″android:toYDelta=”300″android:duration=”2000″/>fromXDeltatoXDelta为动画、结束起始时X坐标上的位置fromYDeltatoYDelta为动画、结束起始时Y坐标上的位置表五rotate画面转移旋转动画效果<rotateandroid:interpolator=”@android:anim/accelerate_decelerate_interpolator”android:fromDegrees=”0″android:toDegrees=”+350″android:pivotX=”50%”android:pivotY=”50%”android:duration=”3000″/>fromDegrees为动画起始时物件的角度说明当角度为负数——表示逆时针旋转当角度为正数——表示顺时针旋转(负数from——to正数:顺时针旋转)(负数from——to负数:逆时针旋转)(正数from——to正数:顺时针旋转)(正数from——to负数:逆时针旋转)toDegrees属性为动画结束时物件旋转的角度可以大于360度感受Android带给我们的新体验pivotXpivotY为动画相对于物件的X、Y坐标的开始位说明:以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置看了上面的例子,想必大家也想看下,这些定义的动画,运行起来是什么样效果,下面运行Scale例子中的动画,界面变化如下:感受Android带给我们的新体验按照上面的讲述学习完了TweenAnimation的定义,对TweenAnimation有了详细的了解,再去了解下AndroidSDK的animationpackage(android.view.animation),其提供了操作TweenAnimation所有的类。感受Android带给我们的新体验AndroidSDK提供了基类:Animation,包含大量的set/getXXXX()函数来设置、读取Animation的属性,也就是前面表一中显示的各种属性。TweenAnimation由4种类型:alpha、scale、translate、roate,在AndroidSDK中提供了相应的类,Animation类派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分别实现了平移、旋转、改变Alpha值等动画,每个子类都在父类的基础上增加了各自独有的属性。再去看下这几个类的构造函数,是不是与我们在表二、表三、表四、表五种定义的属性完全一样。感受Android带给我们的新体验在了解了TweenAnimation的定义,对android.view.animation有了一些基本的认识后,开始介绍TweenAnimation如何使用。AndroidSDK提供了2种方法:直接从XML资源中读取Animation,使用Animation子类的构造函数来初始化Animation对象,第二种方法在看了AndroidSDK中各个类的说明就知道如何使用了,下面简要说明从XML资源中读取Animation,按照应用程序开发的过程,介绍整个使用的过程,如下:1.创建Android工程;2.导入一张图片资源;3.将res\layout\main.xml中的TextView取代为ImageView;4.在res下创建新的文件夹anim,并在此文件夹下面定义AnimationXML文件;5.修改OnCreate()中的代码,显示动画资源;关键代码,解析如下://main.xml中的ImageViewImageViewspaceshipImage=(ImageView)findViewById(R.id.spaceshipImage);//加载动画AnimationhyperspaceJumpAnimation=AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);//使用ImageView显示动画spaceshipImage.startAnimation(hyperspaceJumpAnimation);工程的源代码提供给大家下载,下载地址,这里简要解析如下:AnimationUtils提供了加载动画的函数,除了函数loadAnimation(),其他的到AndroidSDK中去详细了解吧;所谓的动画,也就是对view的内容做一次图形变换;总结说明感受Android带给我们的新体验看了这个长篇幅的介绍,详细大家对TweenAnimation的定义、使用都有了比较深入的了解,由于篇幅有限,这里将AndroidSDK中的内容省略了不少,比如说:Interpolator,需要大家自己去AndroidSDK中仔细阅读。相关文章Android画图学习总结(四)——Animation(中)Android画图学习总结(四)——Animation(下)Android画图学习总结(五)——PaintAndroid画图学习总结(三)——DrawableAndroid画图学习总结(二)——BitmapAndroid画图学习总结(四)——Animation(中)在Android画图学习总结(四)——Animation(上)中详细介绍了TweenAnimation的定义、使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方面补充说明上一篇幅遗漏的问题,帮助大家更好的理解TweenAnimation。对TweenAnimation的本质做个总结:TweenAnimation通过对View的内容完成一系列的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。具体来讲,预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。这些指令可以是以XML文件方式定义,也可以是以源代码方式定义。程序沿着时间线执行这些指令就可以实现动画效果。在这里,我们需要对2个问题进行深入的解析:动画的运行时如何控制的?动画的运行模式。感受Android带给我们的新体验动画的运行时如何控制的?这个问题,我们也就也就是上一篇幅中提到的TweenAnimation,估计大家对什么是Interpolator、到底有什么作用,还是一头雾水,在这里做个详细的说明。按照AndroidSDK中对interpolator的说明:interpolator定义一个动画的变化率(therateofchange)。这使得基本的动画效果(alpha,scale,translate,rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用Interpolator控制。Interpolator定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator是基类,封装了所有Interpolator的共同方法,它只有一个方法,即getInterpolation(floatinput),该方法mapsapointonthetimelinetoamultipliertobeappliedtothetransformationsofananimation。Android提供了几个Interpolator子类,实现了不同的速度曲线,如下:AccelerateDecelerateInterpolator在动画开始与介绍的地方速率改变比较慢,在中间的时候加速AccelerateInterpolator在动画开始的地方速率改变比较慢,然后开始加速CycleInterpolator动画循环播放特定的次数,速率改变沿着正弦曲线DecelerateInterpolator在动画开始的地方速率改变比较慢,然后开始减速LinearInterpolator在动画的以均匀的速率改变对于LinearInterpolator,变化率是个常数,即f(x)=x.publicfloatgetInterpolation(floatinput){returninput;}Interpolator其他的几个子类,也都是按照特定的算法,实现了对变化率。还可以定义自己的Interpolator子类,实现抛物线、自由落体等物理效果。感受Android带给我们的新体验动画的运行模式动画的运行模式有两种:独占模式,即程序主线程进入一个循环,根据动画指令不断刷新屏幕,直到动画结束;中断模式,即有单独一个线程对时间计数,每隔一定的时间向主线程发通知,主线程接到通知后更新屏幕;额外补充说明:Transformation类Transformation记录了仿射矩阵Matrix,动画每触发一次,会对原来的矩阵做一次运算,View的Bitmap与这个矩阵相乘就可实现相应的操作(旋转、平移、缩放等)。Transformation类封装了矩阵和alpha值,它有两个重要的成员,一是mMatrix,二是mAlpha。Transformation类图如下所示:总结说明感受Android带给我们的新体验图形变换通过仿射矩阵实现。图形变换是图形学中的基本知识,简单来说就是,每种变换都是一次矩阵运算。在Android中,Canvas类中包含当前矩阵,当调用Canvas.drawBitmap(bmp,x,y,Paint)绘制时,Android会先把bmp做一次矩阵运算,然后将运算的结果显示在Canvas上。这样,编程人员只需不断修改Canvas的矩阵并刷新屏幕,View里的对象就会不停的做图形变换,动画就形成了。相关文章Android画图学习总结(四)——Animation(上)Android画图学习总结(四)——Animation(下)Android画图学习总结(五)——PaintAndroid画图学习总结(三)——DrawableAndroid画图学习总结(二)——BitmapAndroid画图学习总结(四)——Animation(下)在Android画图学习总结(四)——Animation(上)中,我们详细介绍了TweenAniamation,这里我们将介绍另外一种动画FrameAnimation。在前面已经说过,FrameAnimation是顺序播放事先做好的图像,跟电影类似。不同于animationpackage,AndroidSDK提供了另外一个类AnimationDrawable来定义、使用FrameAnimation。FrameAnimation可以在XMLResource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于TweenAnimation与FrameAnimation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:感受Android带给我们的新体验XML属性说明drawable当前帧引用的drawable资源duration当前帧显示的时间(毫秒为单位)oneshot如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。variablePaddingIftrue,allowsthedrawable’spaddingtochangebasedonthecurrentstatethatisselected.visible规定drawabl

下载资料到本地,随时随地想用就用!

所需积分:1分,4人已下载

Android画图学习.pdf Android画图学习.pdf

简介:Android画图学习

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • android自定义组件(手机加速球+水面波动效果)

    android自定义组件(手机加速球+水面波动效果)

    2017-04-26 12:03

  • 亿万先生老虎机手机版客户端下载

    亿万先生老虎机手机版客户端下载

    2017-04-24 10:03

  • html5调用手机摄像头,实现拍照上传功能

    html5调用手机摄像头,实现拍照上传功能

    2017-04-14 10:07

  • 关于chrome手机调试模式touch的BUG

    关于chrome手机调试模式touch的BUG

    2017-03-23 21:54

网友点评