【笨鸟先飞】android重新学习日记10---图片与动画

来源:互联网 发布:单片机程序 编辑:程序博客网 时间:2024/05/22 17:24

上一章我们学习理解res的存放,最后看到了Drawable的存放,里面会放各种图片,这些图片的后缀是多样化的,jpgpngbmp等等都可以。

 

我们需要从res里面把图片用到代码里面,目的是将图片变为对象。在代码里有了代表图片的对象,再来进行相应的操作。对图片的获取主要有drawablebitmap两个类,完成最终目的一般是获取一个bitmap对象,bitmap对象是android中最常用的图片对象。

 

首先是res的获取方法,R.drawable.图片名字 。这样获取出来的时候图片的ID,这个IDandroid系统自己分配的,

Drawable d = getResources().getDrawable(R.drawable.pictureName);

 

这就获取了一个Drawable ,通过BitmapDrawable类,我们可以实现Drawable bitmap的转化。

 

Drawable 转化为Bitmap

Bitmap bmp = ((BitmapDrawable) d).getBitmap();

 

Bitmap转化为Drawable

Drawable bd =new BitmapDrawable(bmp );

 

以上是两种简单的方法,当然还有其他方法。

 

Bitmap有许多方法,可以对图片进行很多细微的操作,这里介绍一个方法,getPixel(x,y)一个图片比如1080*1720就表示这个图片有1080个横的像素点和1720个数的像素点组成。getPixel(x,y)就是指定具体的第几行第几列的像素点,然后可以直接获取到这个点。

 

这个点就是一个由颜色的,日常生活中,如果有机会见到大型广告,比如公交站,地铁站,火车站,飞机场等,认真看大型广告,就可以发现,一个图片确实是由一个个单独的点组合而成。

 

通过getPixel方法就可以感受到,Bitmap对图片的识别已经非常细致了,可以精确到里面每个像素点。

 

对于图标的处理有matrix方法,是android提供的一个对图片进行统一处理的方法,一般用于对图片的平移,旋转,缩放和倾斜等操作,非常方便。

 

 

图片的使用,除了imageVIew之外,还有一种方案,叫做绘图,采用canvaspaint等方法。

 

里面重点是onDraw类型,通过不停的重绘来完成。onDraw重绘,对于变化型的界面,且变化不确定的具有极大的优势。

 

什么叫做界面图片变化不确定,最简单的例子就是游戏,游戏里面玩家控制的角色就是典型的变化不确定,你不知道玩家这个操作对应的下一个操作是什么。

 

Canvaspaint是一体的,应该说paintcanvas的一部分,canvas的方法里面有一部分是包含paint的。

 

Paint是用于画笔颜色,画笔粗细,填充等。

 

Canvas的方法则主要是确定图片的位置,这里的图片是res的图片,也可以是绘制的简单图像。

 

 

对于变化位置的图片,有一种情况的是位置不确定,这种时候,需要通过onDraw方法来重绘。另外,还有一种情况,则是位置确定的,这种时候,则是采用动画来完成。

 

我们首先要有一个意识,动画的本质是界面状态的变化。是当前的界面的一个变化为一个有点不同的界面。比如一个图片的放大,几个图片的连续出现,也可以由更复杂的动画,比如一个图标从下方缓缓升起,或者带有几个button按钮的一个子界面,由透明到显性的慢慢出现在界面中。

 

界面的变化一共有三个状态,初始态,变化过程,最终态。

 

对于一个动画的设置,初始态是必须有的,其实就是做动画的对象,哪些组件需要进行动画的操作。

 

其次则是变化过程和最终态二选一。

有了初始态和最终态,android的动画机制,补间动画会自动为我们补齐变化过程。

有了初始太和变化过程,那么属性动画会通过变化过程最终算出最终态。

 

下面,分析一个带有几个button按钮的一个子界面,由透明到显性的慢慢出现在界面中的案例。

 

我们能感觉到这是属于有初始态,一个隐藏的子界面,一个变化过程,慢慢显现,所以我们采用属性动画来实现。

 

ValueAnimator animator = ValueAnimator.ofFloat(子界面,透明度,01);

 

这里就是属性动画的基本定义,这个定义就是控制子界面的透明度,从0变到1.

然后需要对动画进行基本特点设定,包括动画变化的速度,变化所消耗时间等等。

anim.setInterpolator(new AccelerateInterpolator() );
anim.setStartDelay(1000);等等

 

在启动动画则需要动画启动装置,叫做AnimatorSet

AnimatorSet animSet = new AnimatorSet();

animSet.play(anim);

这个使用比较简单,就是play这个动画就是了。

 

前面的属性动画,补间动画,还有逐帧动画。可以看做视频文件,或者DVD这种存放动画或者动画本身。

 

AnimatorSet 则是动画放映机,用来放映动画的。

 

通过ValueAnimator 等将动画制作好,然后在适合的时候,用animSet播放就完成了动画的绘制。

 

以上就是关于图片及动画的相关知识理解和学习。

阅读全文
0 0
原创粉丝点击