您的位置:首页 > 移动开发 > Android开发

Android Api Demos登顶之路(二)

2015-07-24 20:07 387 查看
今天我们来实现在两个activity之间实现动画切换的Demo,要实现这个功能非常简单,只需要 在启动第二个activity之后调用overridePendingTransition(enterAnim, exitAnim); 方法即可。

该方法的第一个参数进入的动画效果,即你要为第二个activity设置进入的动画效果 第二个数为退出时的动画效果,即你为第一个activity退出舞台时所设置的动画效果。

这两个参数都为整型,对应你的xml文件ID,你可以在该xml文件中随意定义你想要实现的动画效果。

我们在这里所使用的动画类型为补间动画类型,tween-animation。共有四种基本动画效果,alpha:透明度 渐变效果,rotate: 旋转效果,scale:缩放效果,translate:移动效果。

下面我们来一步一步实现对这些动画效果的定义

在res资源文件夹下新建anim文件夹,在该文件夹下选择新建android xml文件,资源类型选择tween animation

我们可以看到下面列出了四种动画类型,还有一个set,set指的是一个用来存放各种动画效果的容器,你可以 把各种动画效果自由组合,尔后放到set容器中,实现你想要达到的效果。

我们先选择alpha,来实现一个渐变的切换效果。

取名为fade.xml

android:interpolator=”@android:anim/accelerate_interpolator”设置插入器类型

为加速插入器

android:fromAlpha=”0.0”

android:toAlpha=”1.0”

设置透明度由完全透明到完全不透明变化

android:duration=”@android:integer/config_longAnimTime

设置动画持续时间,这里用了一个系统定义的时间

<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="@android:integer/config_longAnimTime">
</alpha>


再创建一个名为hold.xml的动画文件,选择了translate效果

其实我们可以看到这里虽然定义了动画,但它定义的横向移动却是从0到0

所以这个动画是没有动起来的

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="0"
android:duration="@android:integer/config_longAnimTime">
</translate>


接着再创建两个动画文件zoom_enter和zoom_exit,实现缩放的效果

<?xml version="1.0" encoding="utf-8"?>
<!-- android:pivotX="50%p",是指相对于父控件而言取中点,50%的写法是相对于自身而言-->
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<scale
android:fromXScale="2.0" android:toXScale="1.0"
android:fromYScale="2.0" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="@android:integer/config_longAnimTime"/>
</set>


zoom_exit

<?xml version="1.0" encoding="utf-8"?>
<!-- android:pivotX="50%p",是指相对于父控件而言取中点,50%的写法是相对于自身而言
android:zAdjustment="top"是设置将该动画层置于其他动画层的上面-->
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top">
<scale
android:fromXScale="2.0" android:toXScale="1.0"
android:fromYScale="2.0" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="@android:integer/config_longAnimTime"/>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="@android:integer/config_longAnimTime"/>
</set>


创建Animation类,并继承activity

public class Animation extends Activity {
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation);
button = (Button) findViewById(R.id.fadein);
button.setOnClickListener(mFadeinListener);
button = (Button) findViewById(R.id.zoomin);
button.setOnClickListener(mZoominListener);

// 判断一下如果当前的编译版本大于或等于jelly_bean(16、17、18;4.1,4.2,4.3)
// 则显示新功能的几个按钮
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
button = (Button) findViewById(R.id.modernfadein);
button.setOnClickListener(mModernFadeinListener);
button = (Button) findViewById(R.id.modernzoomin);
button.setOnClickListener(mModernZoominListener);
button = (Button) findViewById(R.id.scaleup);
button.setOnClickListener(mModernScaleupListener);
button = (Button) findViewById(R.id.thumbnailzoom);
button.setOnClickListener(mModernThumbnailzoomListener);
} else {
findViewById(R.id.modernfadein).setEnabled(false);
findViewById(R.id.modernzoomin).setEnabled(false);
findViewById(R.id.scaleup).setEnabled(false);
findViewById(R.id.thumbnailzoom).setEnabled(false);
}
}

private OnClickListener mFadeinListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Animation.this, HelloWord.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
}
};
private OnClickListener mZoominListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Animation.this, HelloWord.class);
startActivity(intent);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
}
};
private OnClickListener mModernFadeinListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Animation.this, HelloWord.class);
ActivityOptions options = ActivityOptions.makeCustomAnimation(
Animation.this, R.anim.fade, R.anim.hold);
startActivity(intent, options.toBundle());
}
};
private OnClickListener mModernZoominListener = new OnClickListener() {
@Override
public void onClick(View v) {
//Android 4.1(API16)提供了一个新类ActivityOptions,用来实现Activity的切换动画
//该方法创建一个自定义的动画
Intent intent = new Intent(Animation.this, HelloWord.class);
ActivityOptions options = ActivityOptions.makeCustomAnimation(
Animation.this, R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(intent, options.toBundle());
}
};
private OnClickListener mModernScaleupListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Animation.this, HelloWord.class);
//Android 4.1(API16)提供了一个新类ActivityOptions,用来实现Activity的切换动画
//该方法创建一个动画,能够从屏幕指定的位置和指定的大小拉伸一个活动窗口。
//第一个参数是承载动画的View,第二和第三个参数指定拉伸开始的位置,第四和第五个参数指定拉伸的大小
//这里的v就是名字为scaleup的button按钮,起始位置就是这个按钮的左上角
ActivityOptions options = ActivityOptions.makeScaleUpAnimation(v,
0, 0, v.getWidth(), v.getHeight());
startActivity(intent, options.toBundle());
}
};
private OnClickListener mModernThumbnailzoomListener=new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Animation.this, HelloWord.class);
//将view转换成bitmap
v.setDrawingCacheEnabled(true);
v.setPressed(false);
v.refreshDrawableState();
//转换成的图片就是名为thnmbnailzoom的按钮
Bitmap bitmap = v.getDrawingCache();
//Canvas c=new Canvas(bitmap);
//创建一个动画,能够从屏幕指定的位置和提供的缩略图拉伸一个活动窗口
ActivityOptions options = ActivityOptions.makeThumbnailScaleUpAnimation(v, bitmap, 0, 0);
startActivity(intent, options.toBundle());
//记得将DrawingCacheEnabled还原为false
v.setDrawingCacheEnabled(false);
}
};
}


在layout文件夹下创建activity_animation布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:padding="5dp"
android:text="Press a button to lauch an activity with a custom animation" />

<Button
android:id="@+id/fadein"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Fade in" />

<Button
android:id="@+id/zoomin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Zoom in" />

<Button
android:id="@+id/modernfadein"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Modern fade in" />

<Button
android:id="@+id/modernzoomin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Modern zoom in" />

<Button
android:id="@+id/scaleup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Scale up" />

<Button
android:id="@+id/thumbnailzoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:text="Thumbnail zoom" />

</LinearLayout>


配置文件中配置activity

<activity
android:name="com.example.apidemos.Animation"
android:label="@string/activity_animation" >
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="COM_FISHTOSKY_CODE"/>
</intent-filter>
</activity>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: