上一章我们学习理解res的存放,最后看到了Drawable的存放,里面会放各种图片,这些图片的后缀是多样化的,jpg,png,bmp等等都可以。
我们需要从res里面把图片用到代码里面,目的是将图片变为对象。在代码里有了代表图片的对象,再来进行相应的操作。对图片的获取主要有drawable和bitmap两个类,完成最终目的一般是获取一个bitmap对象,bitmap对象是android中最常用的图片对象。
首先是res的获取方法,R.drawable.图片名字 。这样获取出来的时候图片的ID ,这个ID是android系统自己分配的,
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之外,还有一种方案,叫做绘图,采用canvas,paint等方法。
里面重点是onDraw类型,通过不停的重绘来完成。onDraw重绘,对于变化型的界面,且变化不确定的具有极大的优势。
什么叫做界面图片变化不确定,最简单的例子就是游戏,游戏里面玩家控制的角色就是典型的变化不确定,你不知道玩家这个操作对应的下一个操作是什么。
Canvas和paint是一体的,应该说paint是canvas的一部分,canvas的方法里面有一部分是包含paint的。
Paint是用于画笔颜色,画笔粗细,填充等。
Canvas的方法则主要是确定图片的位置,这里的图片是res的图片,也可以是绘制的简单图像。
对于变化位置的图片,有一种情况的是位置不确定,这种时候,需要通过onDraw方法来重绘。另外,还有一种情况,则是位置确定的,这种时候,则是采用动画来完成。
我们首先要有一个意识,动画的本质是界面状态的变化。是当前的界面的一个变化为一个有点不同的界面。比如一个图片的放大,几个图片的连续出现,也可以由更复杂的动画,比如一个图标从下方缓缓升起,或者带有几个button按钮的一个子界面,由透明到显性的慢慢出现在界面中。
界面的变化一共有三个状态,初始态,变化过程,最终态。
对于一个动画的设置,初始态是必须有的,其实就是做动画的对象,哪些组件需要进行动画的操作。
其次则是变化过程和最终态二选一。
有了初始态和最终态,android的动画机制,补间动画会自动为我们补齐变化过程。
有了初始太和变化过程,那么属性动画会通过变化过程最终算出最终态。
下面,分析一个带有几个button按钮的一个子界面,由透明到显性的慢慢出现在界面中的案例。
我们能感觉到这是属于有初始态,一个隐藏的子界面,一个变化过程,慢慢显现,所以我们采用属性动画来实现。
ValueAnimator animator = ValueAnimator.ofFloat(子界面,透明度,0,1);
这里就是属性动画的基本定义,这个定义就是控制子界面的透明度,从0变到1.
然后需要对动画进行基本特点设定,包括动画变化的速度,变化所消耗时间等等。
anim.setInterpolator(new AccelerateInterpolator() );
anim.setStartDelay(1000);等等
在启动动画则需要动画启动装置,叫做AnimatorSet
AnimatorSet animSet = new AnimatorSet();
animSet.play(anim);
这个使用比较简单,就是play这个动画就是了。
前面的属性动画,补间动画,还有逐帧动画。可以看做视频文件,或者DVD这种存放动画或者动画本身。
而AnimatorSet 则是动画放映机,用来放映动画的。
通过ValueAnimator 等将动画制作好,然后在适合的时候,用animSet播放就完成了动画的绘制。
以上就是关于图片及动画的相关知识理解和学习。