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
设置动画持续时间,这里用了一个系统定义的时间
再创建一个名为hold.xml的动画文件,选择了translate效果
其实我们可以看到这里虽然定义了动画,但它定义的横向移动却是从0到0
所以这个动画是没有动起来的
接着再创建两个动画文件zoom_enter和zoom_exit,实现缩放的效果
zoom_exit
创建Animation类,并继承activity
在layout文件夹下创建activity_animation布局文件
配置文件中配置activity
该方法的第一个参数进入的动画效果,即你要为第二个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>
相关文章推荐
- android 手机获取外置SD卡路径
- android的测试方法,
- android 不同手机外置SD卡路径不同
- Android Studio如何在真机中调试
- Android Ion
- Android 获取view在屏幕中的位置
- android getViewTreeObserver的使用
- universal-image-loader 使用思路
- 设置dialog的大小
- android代码的形式让button变成圆角 透明,如图
- Android 真机测试应用
- android:layout_weight的含义
- android 按钮按下效果(文字颜色和按钮同时变化)
- Android程序退出彻底关闭进程的方法
- Android FAT分区格式化
- Android 音频播放之SoundPool的使用和封装
- 关于Android中物理按键不响应的可能的一个问题。
- android studio中如何添加删除工程(module)
- Android Screen Monitor 下载地址
- Android权限