成都创新互联网站制作重庆分公司

android图形图像-创新互联


android图形图像
Tween动画和Frame动画

为乐业等地区用户提供了全套网页设计制作服务,及乐业网站建设行业解决方案。主营业务为网站设计、网站制作、乐业网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!1、Android平台提供了两类动画,分别是Tween动画和Frame动画。

Tween通过场景里的对象不断的进行图片的变换,比如平移、渐变、缩放、
旋转等来产生动画效果;
Frame动画叫做顺序播放实现做好的图像和电影类似。另外加上gif动画,
因为如果直接使用Bitmap或其他方法直接调用gif图片资源的话,显示的
是静态的,如果要做成动态的,就需要一些其他的方法来实现。

Tween动画分类:

Alpha:渐变透明度动画
Scale:渐变尺寸伸缩动画
Translate:画面转换位置移动动画
Rotate:画面转移旋转动画

有两种方式(java,xml):
java:

AlphaAnimation anim = new AlphaAnimation(0,1);
anim.setDuration(3000);
imageView.startAnimation(anim);

xml:
res/anim

Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
imageView.startAnimation(animation);

2)scale
ScaleAnimation(float fromX, float toX, float fromY,
float toY, int pivotXType, floatXValue,
int pivotYType, float pivotYValue)
   功能:创建一个渐变尺寸伸缩动画
   参数:fromX,toX分别是起始和结束时x坐标上的伸缩尺寸。
   fromY,toY分别是起始和结束时ye坐标上的伸缩尺寸。
   pivotXValue,pivotYValue分别为伸缩动画相对于x,y坐标开始的位置,
   pivotXType,pivotYType分别为x,y的伸缩模式。
2.1)、直接在程序中实现的方式java代码:

Animation scale = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);?
    scale.setDuration(5000);?//设置动画持续时间?    img.startAnimation(scale); //开始动画

ps:

相对于(0,0)位置

Animation anim = new ScaleAnimation(0, 1, 0, 1);

相对与自身中心位置

Animation anim = new ScaleAnimation(1.0f,0.0f,1.0f,0.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

是否保持动画后的状态,true表示保持

anim.setFillAfter(true);

消失在(300,300)的位置

Animation anim = new ScaleAnimation(1.0f,0.0f,1.0f,0.0f,Animation.ABSOLUTE,300,Animation.ABSOLUTE,300);

*****重点理解
00……………………………………………………………………………………………………………………………..

2.2).xml


以指定位置(300,300)为中心点


通过%来表示相对于自身什么位置

  

通过p表示相对于父控件什么位置

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

指定速度变化过程

3)translate
TranslateAnimation(float fromXDelta, float toXDelta, float YDelta, float toYDelta)
   功能:创建一个移动画面位置的动画
   参数:fromXDelta,fromYDelta分别是其实坐标;toXDelta,toYDelta分别是结束坐标
1、直接在程序中实现java代码:

Animation translate = new TranslateAnimation(10, 100, 10, 100);
translate.setDuration(3000);?//设置动画持续时间?img.startAnimation(translate); //开始动画?

2、在XML中创建动画

   java调用

Animation translate = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.translate_anim);?
    img.startAnimation(translate);//开始动画

4)rotate
Rotate(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType,float pivotYValue)
   功能:创建一个旋转画面的动画
   参数:fromDegrees为开始的角度;toDegrees为结束的角度。pivotXValue、pivotYType分别为x,y的伸缩模式。pivotXValue,pivotYValue分别为伸缩动画相对于x,y的坐标开始位置
1、直接在程序中创建动画java代码:

Animation rotate = new RotateAnimation(0f,+360f,?
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);?
rotate.setDuration(3000);
img.startAnimation(rotate);

5)AnimationSet
是一个动画集合
java:

AnimationSet as = new AnimationSet(true);
as.setDuration(2000);//给每一个Animation指定持续时间as.setInterpolator(new LinearInterpolator());//指定AnimationSet中所有的Animation都是匀速Animation rotateAnim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//rotateAnim.setDuration(2000);rotateAnim.setStartOffset(1000);//在下边startAnimation之后,过多长时间开始执行动画AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);
//alphaAnim.setDuration(2000);as.addAnimation(rotateAnim);
as.addAnimation(alphaAnim);
imageView.startAnimation(as);

xml:

    
Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);
imageView.startAnimation(anim);

ps:1.监听Animation状态的事件AnimationListener

anim.setAnimationListener(new AnimationListener() {
    @Override
public void onAnimationStart(Animation animation) {
        
    }
    @Override
public void onAnimationRepeat(Animation animation) {
        
    }
    @Override
public void onAnimationEnd(Animation animation) {
        
    }
});
ps.2.启动Animation两种方式
imageView.startAnimation(anim);

imageView.setAnimation(anim);
anim.start();
以上两者等价
anim.cancle();

2.Frame动画

2.1 java的实现:

方式一:

private int[] images = {R.drawable.pic1,
    R.drawable.pic2,R.drawable.pic3,
    R.drawable.pic4};
final AnimationDrawable animDrawable = new AnimationDrawable();

for(int i=0;i<4;i++){
    animDrawable.addFrame(getResources().getDrawable(images[i]),80);
}
image.setBackgroundDrawable(animDrawable);
animDrawable.setOneShot(false);
btn1.setOnClickListener(new OnClickListener() {
    @Override
public void onClick(View v) {
        animDrawable.start();
//                animDrawable.stop();    }
});

方式二:
要求是文件命名要遵循一定规律,方便递归查找。
for(int i=0;i<4;i++){
   //参数1,文件名
   //参数2,资源类型
   //参数3,是那个package的。
   int resId = getResources().getIdentifier("pic"+(i+1), "drawable", "com.anjoyo.animation2");
   animDrawable.addFrame(getResources().getDrawable(resId), 500);
}
image.setBackgroundDrawable(animDrawable);
animDrawable.start();

2.2xml的实现:
定义:

        
使用1:
AnimationDrawable d = (AnimationDrawable) getResources().getDrawable(R.anim.frame);
image.setBackgroundDrawable(d);
d.start();
使用2,在xml中使用:

AnimationDrawable d = (AnimationDrawable) image.getBackground();
d.start();


网站名称:android图形图像-创新互联
标题路径:http://cxhlcq.com/article/cogcdp.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部