activity-启动动画的设定(下面弹出出现,弹入下面消失)
1.今天為了把一個activity以dialog的形式顯示,而且實現(xiàn)從開始的時候從底部往上彈出,結束的時候,從上往下消失,做了如下的工作。
1)如果把一個activity以dialog的形式顯示?
這個只需要設置theme的樣式為*.dialog就行了,如下 在AndroidManifest.xml設置屬性
<activity android:name=".ui.EditSlideDurationActivity"android:label="@string/change_duration_activity"android:theme="@style/Mms.Theme.Edit.Dialog"></activity>?
Mms.Theme.Edit.Dialog ??是在funui_style.xml中定義的一個style<style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog"></style>
2) 這個就能實現(xiàn)它以dialog的樣式實現(xiàn)了,但是這時候你會發(fā)現(xiàn),它是顯示在屏幕的中央,而且是一個小方塊,并不會充滿這個屏幕的寬度,這時候還需要進行如下的操作,就是在這個activity中設置顯示的位置,而在這個activity的xml中設置寬度
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="360dp"android:layout_height="165dp"android:orientation="vertical" >?
其實,還有兩外一個方法,就是在代碼里面進行設定,如下
import android.view.Window; import android.view.WindowManager; //在oncreate里添加如下代碼Window w = getWindow();WindowManager.LayoutParams attrs = w.getAttributes();attrs.width = WindowManager.LayoutParams.MATCH_PARENT;w.setAttributes(attrs);?注意:上面的代碼,必須用在dialog 創(chuàng)建完成以后,如下
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG,"StorageDefaultPathDialog onCreate()");mSDCardStateFilter = new IntentFilter(SD_ACTION);mSDCardStateFilter.addDataScheme("file");mReceiver = mSDStateReceiver;mInsertOtg = getIntent().getBooleanExtra(INSERT_OTG, false); //放在這里是沒有效果的 createDialog(); /* Vanzo:zhangshuli on: Thu, 02 Jul 2015 16:11:42 +0800*/Window w = getWindow();WindowManager.LayoutParams attrs = w.getAttributes();attrs.width = WindowManager.LayoutParams.MATCH_PARENT;w.setAttributes(attrs); // End of Vanzo: zhangshuli } private void createDialog() {final AlertController.AlertParams p = mAlertParams;p.mTitle = mInsertOtg ? getString(com.mediatek.internal.R.string.usb_storage_ready_title) : getString(com.mediatek.internal.R.string.sdcard_ready_title);p.mView = createView();p.mViewSpacingSpecified=true;p.mViewSpacingLeft=15;p.mViewSpacingRight=15;p.mViewSpacingTop=5;p.mViewSpacingBottom=5;p.mPositiveButtonText = getString(android.R.string.yes);p.mPositiveButtonListener = this;p.mNegativeButtonText = getString(android.R.string.no);p.mNegativeButtonListener = this;setupAlert();}?
另外,在代碼中添加一個位置顯示設置
import android.view.Gravity;@Overrideprotected void onCreate(Bundle icicle) {super.onCreate(icicle);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.edit_slide_duration); /* Vanzo:zhangshuli on: Mon, 16 Mar 2015 16:29:50 +0000*/getWindow().setGravity(Gravity.BOTTOM); // End of Vanzo: zhangshuli }這時候確實是能夠實現(xiàn)activity以充滿屏幕寬度和在屏幕底部的方式存在。
?
3)動畫效果添加
最開始是看得網上的方法,如下
?
<style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog"><item name="android:windowAnimationStyle">@style/Animation</item></style><style name="Animation"><item name="windowEnterAnimation">@anim/push_bottom_in</item><item name="windowExitAnimation">@anim/push_bottom_out</item></style>這個方法看起來似乎有點效果,但是,你會發(fā)現(xiàn),它其實是在動畫退出的時候閃爍一下。后來想著是不是因為在代碼中設置才可以消除,因為感覺可能是跟activity轉變?yōu)閐ialog以后顯示有沖突呢
代碼中設置的話,需要用到以下方法
overridePendingTransition(0, R.anim.push_bottom_out);第一個參數(shù):是即將出現(xiàn)的那個activity的動畫效果
第二個參數(shù):是即將消息的activity的動畫效果
代碼如下,也就是在啟動它的地方添加動畫,注意一定要在啟動以后添加動畫
builder.setSingleChoiceItems(arrayAdapter, checkedItem,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {if ((which >= 0) && (which < NUM_DIRECT_DURATIONS)) {mSlideshowEditor.changeDuration(mPosition, (which + 1) * 1000);} else {Intent intent = new Intent(SlideEditorActivity.this,EditSlideDurationActivity.class);intent.putExtra(EditSlideDurationActivity.SLIDE_INDEX, mPosition);intent.putExtra(EditSlideDurationActivity.SLIDE_TOTAL,mSlideshowModel.size());intent.putExtra(EditSlideDurationActivity.SLIDE_DUR, dur); // in seconds startActivityForResult(intent, REQUEST_CODE_CHANGE_DURATION); /* Vanzo:zhangshuli on: Tue, 17 Mar 2015 11:00:57 +0000*/overridePendingTransition(R.anim.push_bottom_in, 0) // End of Vanzo: zhangshuli}?
結果發(fā)現(xiàn)還是沒有效果
后來又在網上找了如下的方法,
<style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog"><item name="android:windowAnimationStyle">@style/AnimBottom</item></style><style name="AnimBottom" parent="@android:style/Animation.Activity"><item name="android:activityOpenEnterAnimation">@anim/push_bottom_in</item><item name="android:activityOpenExitAnimation">@anim/push_bottom_in</item><item name="android:activityCloseExitAnimation">@anim/push_bottom_out</item><item name="android:activityCloseEnterAnimation">@anim/push_bottom_out</item></style> </resources>我們可以發(fā)現(xiàn)這個屬性引用名雖然跟前面的一樣,但是里面的屬性卻不同。然后我就用了這個方法,這個方法其實是可以的。但是,它設定的是啟動activity跟被啟動activity的關系,所以你設定了它以后,所有activity
的啟動方式都變了,這個方法失敗了。
最后,終于找到了一個方法,如下
如下
?
/* Vanzo:zhangshuli on: Mon, 16 Mar 2015 20:42:26 +0000*/ //這個是沒有什么效果的@Overrideprotected void onDestroy() {super.onDestroy();finish();overridePendingTransition(0, R.anim.push_bottom_out);android.util.Log.e("zhangshuli", "ondestroy");}
//這個是關鍵 @Overridepublic void finish() {super.finish();overridePendingTransition(0, R.anim.push_bottom_out);android.util.Log.e("zhangshuli", "finish");} // End of Vanzo: zhangshuli
也就是說,要想這個overridePendingTransition(0, R.anim.push_bottom_out); 有效果,它必須放在startactivity() 或者finish()的后面,而且只生效一次
?動畫如下
<!--in.xml--><?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" ><translateandroid:duration="3000"android:fromYDelta="100%p"android:toYDelta="0"/></set><!--out.xml--> <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" ><translateandroid:duration="3000"android:fromYDelta="0"android:toYDelta="100%p"/></set>這樣就實現(xiàn)了activity以dialog的樣式顯示,而且從底部彈出
?
轉載于:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_anim_150316214.html
總結
以上是生活随笔為你收集整理的activity-启动动画的设定(下面弹出出现,弹入下面消失)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制图综合:河流水系提取简化
- 下一篇: 国产电影凭什么霸屏电影院?