Android开发之图形图像与动画(二)Animation实现图像的渐变/缩放/位移/旋转
程序员文章站
2023-12-12 19:47:22
android 平台提供了两类动画。 一类是tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 下面就讲一下tweene ani...
android 平台提供了两类动画。 一类是tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
下面就讲一下tweene animations。
主要类:
animation 动画
alphaanimation 渐变透明度
rotateanimation 画面旋转
scaleanimation 渐变尺寸缩放
translateanimation 位置移动
animationset 动画集
一.alphaanimation
其中alphaanimation类第一个参数fromalpha表示动画起始时的透明度, 第二个参数toalpha表示动画结束时的透明度。
setduration用来设置动画持续时间。
二.rotateanimation
其中rotateanimation类第一个参数fromdegrees表示动画起始时的角度, 第二个参数todegrees表示动画结束时的角度。
另外还可以设置伸缩模式pivotxtype、pivotytype, 伸缩动画相对于x,y 坐标的开始位置pivotxvalue、pivotyvalue等。
三.scaleanimation
scaleanimation类中
第一个参数fromx ,第二个参数tox:分别是动画起始、结束时x坐标上的伸缩尺寸。
第三个参数fromy ,第四个参数toy:分别是动画起始、结束时y坐标上的伸缩尺寸。
另外还可以设置伸缩模式pivotxtype、pivotytype, 伸缩动画相对于x,y 坐标的开始位置pivotxvalue、pivotyvalue等。
四.translateanimation
第一个参数fromxdelta ,第二个参数toxdelta:分别是动画起始、结束时x坐标。
第三个参数fromydelta ,第四个参数toydelta:分别是动画起始、结束时y坐标。
下面我实现的这个例子是使得图片有上述四个动画效果,且其中第五实现的是两个效果的重叠,具体的实现截图如下:
点击各个按钮会做出相应的反应。
本实例用到的布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<absolutelayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<button
android:id="@+id/button_scale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scale"
android:layout_x="5dp"
android:layout_y="383dp" />
<button
android:id="@+id/button_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rotate"
android:layout_x="158dp"
android:layout_y="383dp" />
<button
android:id="@+id/button_alpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alpha"
android:layout_x="5dp"
android:layout_y="331dp" />
<button
android:id="@+id/button_translate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="translate"
android:layout_x="160dp"
android:layout_y="329dp" />
<button
android:id="@+id/button_alpha_translate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alpha_translate"
android:layout_x="84dp"
android:layout_y="265dp" />
<imageview
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="105dp"
android:layout_y="133dp"
android:src="@drawable/ic_launcher"
/>
</absolutelayout>
实现本实例的源代码如下:
public class animations_activity extends activity {
private button button1;
private button button2;
private button button3;
private button button4;
private button button5;
private imageview imageview;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_animations_);
button1=(button)findviewbyid(r.id.button_alpha);
button2=(button)findviewbyid(r.id.button_rotate);
button3=(button)findviewbyid(r.id.button_scale);
button4=(button)findviewbyid(r.id.button_translate);
button5=(button)findviewbyid(r.id.button_alpha_translate);
imageview=(imageview)findviewbyid(r.id.imageview);
button1.setonclicklistener(new mybutton());
button2.setonclicklistener(new mybutton());
button3.setonclicklistener(new mybutton());
button4.setonclicklistener(new mybutton());
button5.setonclicklistener(new mybutton());
}
class mybutton implements onclicklistener{
@override
public void onclick(view arg0) {
// todo auto-generated method stub
switch (arg0.getid()) {
case r.id.button_alpha:
alpha();
break;
case r.id.button_rotate:
rotata();
break;
case r.id.button_scale:
scale();
break;
case r.id.button_translate:
translate();
break;
case r.id.button_alpha_translate:
alpha_translate();
break;
default:
break;
}
}
}
/*
* 1.创建一个animationset对象,该对象存储的是动画的集合
* 2.根据需要创建相应的animation对象
* 3.根据动画的需求,为animation对象设置相应的数据(即执行效果)
* 4.奖animation对象添加到animationset对象当中
* 5.使用控件对象开始执行animationset
*/
public void alpha() {
animationset animationset=new animationset(true);
alphaanimation alphaanimation=new alphaanimation(1, 0);
alphaanimation.setduration(2000);
animationset.addanimation(alphaanimation);
imageview.startanimation(animationset);
}
public void rotata(){
animationset animationset=new animationset(true);
//后面的四个参数定义的是旋转的圆心位置
rotateanimation rotateanimation=new rotateanimation(
0, 360,
animation.relative_to_parent, 1f,
animation.relative_to_parent, 0f);
rotateanimation.setduration(2000);
animationset.addanimation(rotateanimation);
imageview.startanimation(animationset);
}
public void scale() {
animationset animationset=new animationset(true);
scaleanimation scaleanimation=new scaleanimation(
1, 0.1f, 1, 0.1f,
animation.relative_to_self, 0.5f,
animation.relative_to_self, 0.5f);
scaleanimation.setduration(2000);
animationset.addanimation(scaleanimation);
imageview.startanimation(scaleanimation);
}
public void translate() {
animationset animationset=new animationset(true);
translateanimation translateanimation=new translateanimation(
animation.relative_to_self, 0f, //x轴的开始位置
animation.relative_to_self, 0.5f, //x轴的结束位置
animation.relative_to_self, 0f, //y轴的开始位置
animation.relative_to_self, 1.0f); //y轴的结束位置
translateanimation.setduration(2000);
animationset.addanimation(translateanimation);
/*
* 第一行的设置如果为true,则动画执行完之后效果定格在执行完之后的状态
* 第二行的设置如果为false,则动画执行完之后效果定格在执行完之后的状态
* 第三行设置的是一个long类型的值,是指动画延迟多少毫秒之后执行
* 第四行定义的是动画重复几次执行
*/
animationset.setfillafter(true);
animationset.setfillbefore(false);
animationset.setstartoffset(2000);
animationset.setrepeatcount(3);
imageview.startanimation(animationset);
}
public void alpha_translate() {
animationset animationset=new animationset(true);
alphaanimation alphaanimation=new alphaanimation(1, 0);
alphaanimation.setduration(2000);
animationset.addanimation(alphaanimation);
translateanimation translateanimation=new translateanimation(
animation.relative_to_self, 0f, //x轴的开始位置
animation.relative_to_self, 0.5f, //x轴的结束位置
animation.relative_to_self, 0f, //y轴的开始位置
animation.relative_to_self, 1.0f); //y轴的结束位置
translateanimation.setduration(2000);
animationset.addanimation(translateanimation);
imageview.startanimation(animationset);
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.activity_animations_, menu);
return true;
}
}
下面就讲一下tweene animations。
主要类:
animation 动画
alphaanimation 渐变透明度
rotateanimation 画面旋转
scaleanimation 渐变尺寸缩放
translateanimation 位置移动
animationset 动画集
一.alphaanimation
其中alphaanimation类第一个参数fromalpha表示动画起始时的透明度, 第二个参数toalpha表示动画结束时的透明度。
setduration用来设置动画持续时间。
二.rotateanimation
其中rotateanimation类第一个参数fromdegrees表示动画起始时的角度, 第二个参数todegrees表示动画结束时的角度。
另外还可以设置伸缩模式pivotxtype、pivotytype, 伸缩动画相对于x,y 坐标的开始位置pivotxvalue、pivotyvalue等。
三.scaleanimation
scaleanimation类中
第一个参数fromx ,第二个参数tox:分别是动画起始、结束时x坐标上的伸缩尺寸。
第三个参数fromy ,第四个参数toy:分别是动画起始、结束时y坐标上的伸缩尺寸。
另外还可以设置伸缩模式pivotxtype、pivotytype, 伸缩动画相对于x,y 坐标的开始位置pivotxvalue、pivotyvalue等。
四.translateanimation
第一个参数fromxdelta ,第二个参数toxdelta:分别是动画起始、结束时x坐标。
第三个参数fromydelta ,第四个参数toydelta:分别是动画起始、结束时y坐标。
下面我实现的这个例子是使得图片有上述四个动画效果,且其中第五实现的是两个效果的重叠,具体的实现截图如下:
点击各个按钮会做出相应的反应。
本实例用到的布局文件如下:
复制代码 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<absolutelayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<button
android:id="@+id/button_scale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scale"
android:layout_x="5dp"
android:layout_y="383dp" />
<button
android:id="@+id/button_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rotate"
android:layout_x="158dp"
android:layout_y="383dp" />
<button
android:id="@+id/button_alpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alpha"
android:layout_x="5dp"
android:layout_y="331dp" />
<button
android:id="@+id/button_translate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="translate"
android:layout_x="160dp"
android:layout_y="329dp" />
<button
android:id="@+id/button_alpha_translate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alpha_translate"
android:layout_x="84dp"
android:layout_y="265dp" />
<imageview
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="105dp"
android:layout_y="133dp"
android:src="@drawable/ic_launcher"
/>
</absolutelayout>
实现本实例的源代码如下:
复制代码 代码如下:
public class animations_activity extends activity {
private button button1;
private button button2;
private button button3;
private button button4;
private button button5;
private imageview imageview;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_animations_);
button1=(button)findviewbyid(r.id.button_alpha);
button2=(button)findviewbyid(r.id.button_rotate);
button3=(button)findviewbyid(r.id.button_scale);
button4=(button)findviewbyid(r.id.button_translate);
button5=(button)findviewbyid(r.id.button_alpha_translate);
imageview=(imageview)findviewbyid(r.id.imageview);
button1.setonclicklistener(new mybutton());
button2.setonclicklistener(new mybutton());
button3.setonclicklistener(new mybutton());
button4.setonclicklistener(new mybutton());
button5.setonclicklistener(new mybutton());
}
class mybutton implements onclicklistener{
@override
public void onclick(view arg0) {
// todo auto-generated method stub
switch (arg0.getid()) {
case r.id.button_alpha:
alpha();
break;
case r.id.button_rotate:
rotata();
break;
case r.id.button_scale:
scale();
break;
case r.id.button_translate:
translate();
break;
case r.id.button_alpha_translate:
alpha_translate();
break;
default:
break;
}
}
}
/*
* 1.创建一个animationset对象,该对象存储的是动画的集合
* 2.根据需要创建相应的animation对象
* 3.根据动画的需求,为animation对象设置相应的数据(即执行效果)
* 4.奖animation对象添加到animationset对象当中
* 5.使用控件对象开始执行animationset
*/
public void alpha() {
animationset animationset=new animationset(true);
alphaanimation alphaanimation=new alphaanimation(1, 0);
alphaanimation.setduration(2000);
animationset.addanimation(alphaanimation);
imageview.startanimation(animationset);
}
public void rotata(){
animationset animationset=new animationset(true);
//后面的四个参数定义的是旋转的圆心位置
rotateanimation rotateanimation=new rotateanimation(
0, 360,
animation.relative_to_parent, 1f,
animation.relative_to_parent, 0f);
rotateanimation.setduration(2000);
animationset.addanimation(rotateanimation);
imageview.startanimation(animationset);
}
public void scale() {
animationset animationset=new animationset(true);
scaleanimation scaleanimation=new scaleanimation(
1, 0.1f, 1, 0.1f,
animation.relative_to_self, 0.5f,
animation.relative_to_self, 0.5f);
scaleanimation.setduration(2000);
animationset.addanimation(scaleanimation);
imageview.startanimation(scaleanimation);
}
public void translate() {
animationset animationset=new animationset(true);
translateanimation translateanimation=new translateanimation(
animation.relative_to_self, 0f, //x轴的开始位置
animation.relative_to_self, 0.5f, //x轴的结束位置
animation.relative_to_self, 0f, //y轴的开始位置
animation.relative_to_self, 1.0f); //y轴的结束位置
translateanimation.setduration(2000);
animationset.addanimation(translateanimation);
/*
* 第一行的设置如果为true,则动画执行完之后效果定格在执行完之后的状态
* 第二行的设置如果为false,则动画执行完之后效果定格在执行完之后的状态
* 第三行设置的是一个long类型的值,是指动画延迟多少毫秒之后执行
* 第四行定义的是动画重复几次执行
*/
animationset.setfillafter(true);
animationset.setfillbefore(false);
animationset.setstartoffset(2000);
animationset.setrepeatcount(3);
imageview.startanimation(animationset);
}
public void alpha_translate() {
animationset animationset=new animationset(true);
alphaanimation alphaanimation=new alphaanimation(1, 0);
alphaanimation.setduration(2000);
animationset.addanimation(alphaanimation);
translateanimation translateanimation=new translateanimation(
animation.relative_to_self, 0f, //x轴的开始位置
animation.relative_to_self, 0.5f, //x轴的结束位置
animation.relative_to_self, 0f, //y轴的开始位置
animation.relative_to_self, 1.0f); //y轴的结束位置
translateanimation.setduration(2000);
animationset.addanimation(translateanimation);
imageview.startanimation(animationset);
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.activity_animations_, menu);
return true;
}
}