Android 常用动画小结
1. 渐入动画
// Request the next activity transition (here starting a new one). startActivity(new Intent(Animation.this, AlertDialogSamples.class)); // Supply a custom animation. This one will just fade the new // activity on top. Note that we need to also supply an animation // (here just doing nothing for the same amount of time) for the // old activity to prevent it from going away too soon. overridePendingTransition(R.anim.fade, R.anim.hold);
R.anim.fade和 R.anim.hold.如下:
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2007 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_longAnimTime" android:fromAlpha="0.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="1.0" />
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2009 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_longAnimTime" android:fromXDelta="0" android:interpolator="@android:anim/accelerate_interpolator" android:toXDelta="0" />
2.快速进入动画
// Request the next activity transition (here starting a new one). startActivity(new Intent(Animation.this, AlertDialogSamples.class)); // This is a more complicated animation, involving transformations // on both this (exit) and the new (enter) activity. Note how for // the duration of the animation we force the exiting activity // to be Z-ordered on top (even though it really isn't) to achieve // the effect we want. overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
R.anim.zoom_enter 和 R.anim.zoom_exit 如下:
<?xml version="1.0" encoding="utf-8"?> <!-- /* ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <!-- Special window zoom animation: this is the element that enters the screen, it starts at 200% and scales down. Goes with zoom_exit.xml. --> <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_mediumAnimTime" /> </set>
<?xml version="1.0" encoding="utf-8"?> <!-- /* ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <!-- Special window zoom animation: this is the element that exits the screen, it is forced above the entering element and starts at its normal size (filling the screen) and scales down while fading out. This goes with zoom_enter.xml. --> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:zAdjustment="top"> <scale android:fromXScale="1.0" android:toXScale=".5" android:fromYScale="1.0" android:toYScale=".5" android:pivotX="50%p" android:pivotY="50%p" android:duration="@android:integer/config_mediumAnimTime" /> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="@android:integer/config_mediumAnimTime"/> </set>
3. 中心渐变进入
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
要有版本限制,低版本是不支持的。
// Create a more complicated animation, involving transformations // on both this (exit) and the new (enter) activity. Note how for // the duration of the animation we force the exiting activity // to be Z-ordered on top (even though it really isn't) to achieve // the effect we want. ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this, R.anim.zoom_enter, R.anim.zoom_enter); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
中心快速同理如上。
中心缩放的2种形式:
// Create a scale-up animation that originates at the button // being pressed. ActivityOptions opts = ActivityOptions.makeScaleUpAnimation( v, 0, 0, v.getWidth(), v.getHeight()); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
有版本限制,如上。
// Create a thumbnail animation. We are going to build our thumbnail // just from the view that was pressed. We make sure the view is // not selected, because by the time the animation starts we will // have finished with the selection of the tap. v.setDrawingCacheEnabled(true); v.setPressed(false); v.refreshDrawableState(); Bitmap bm = v.getDrawingCache(); Canvas c = new Canvas(bm); //c.drawARGB(255, 255, 0, 0); ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation( v, bm, 0, 0); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle()); v.setDrawingCacheEnabled(false);
有版本限制,如上所示。
时刻怀有一颗虔诚之心,乐于分享。知识才更有意义。