核心思想知識(shí)點(diǎn):
1)、 AlertDialog的基本使用
2)、添加動(dòng)畫
效果圖如下
GIF.gif
功能實(shí)現(xiàn)過程
1拷窜、strings.xml
<resources>
<string name="app_name">動(dòng)畫對(duì)話框</string>
<string name="text_title1">提示</string>
<string name="text_title2">您確定要退出58同城嗎涧黄?</string>
<string name="text_btn_determine">確定</string>
<string name="text_btn_cancel">取消</string>
</resources>
2、dialog_layout.xml
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<!--標(biāo)題-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:text="@string/text_title1"
android:textColor="@color/black"
android:textSize="16sp" />
<!--提示文字-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="50dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="20dp"
android:text="@string/text_title2"
android:textColor="@color/blue"
android:textSize="20sp" />
<!--線-->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/yellow" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--確定按鈕-->
<Button
android:id="@+id/btn_determine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="@string/text_btn_determine"
android:textColor="@color/orange"
android:textSize="20sp" />
<!--線-->
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/yellow" />
<!--取消按鈕-->
<Button
android:id="@+id/btn_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="@string/text_btn_cancel"
android:textColor="@color/orange"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
3、styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="mystyle" parent="android:Animation">
<!--進(jìn)入時(shí)的動(dòng)畫-->
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<!--退出時(shí)的動(dòng)畫-->
<item name="android:windowExitAnimation">@anim/dialog_exit</item>
</style>
</resources>
4、dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--從上進(jìn)入到中間-->
<translate
android:duration="200"
android:fromYDelta="-100%">
</translate>
</set>
5月帝、dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--從中間到底部退出-->
<translate
android:fromYDelta="0"
android:toYDelta="100%"
android:duration="200"/>
</set>
6嚷辅、activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
>
</RelativeLayout>
7、MainActivity.java
public class MainActivity extends Activity {
private Button button_determine, button_cancel; //定義對(duì)話框按鈕
private AlertDialog dlg; //定義對(duì)話框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 判斷當(dāng)單擊手機(jī)返回按鈕時(shí)扁位,從手機(jī)頂部向下移動(dòng)對(duì)話
* 再次單擊返回按鈕,對(duì)話框?qū)闹虚g向底部移動(dòng)消失對(duì)話框
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//判斷如果單擊了返回按鈕
if (keyCode == KeyEvent.KEYCODE_BACK) {
//創(chuàng)建對(duì)話框?qū)嵗? dlg = new AlertDialog.Builder(this).create();
dlg.show(); //顯示對(duì)話框
Window window = dlg.getWindow(); //獲取對(duì)話框窗口
window.setGravity(Gravity.CENTER); //此處設(shè)置dialog顯示在中心位置
window.setWindowAnimations(R.style.mystyle); //添加動(dòng)畫
window.setContentView(R.layout.dialog_layout); //設(shè)置對(duì)話框布局文件
//獲取對(duì)話框確定按鈕
button_determine = (Button) window.findViewById(R.id.btn_determine);
//獲取對(duì)話框取消按鈕
button_cancel = (Button) window.findViewById(R.id.btn_cancel);
initEvent(); //調(diào)用初始化事件方法
}
return super.onKeyDown(keyCode, event);
}
/**
* 該方法出事對(duì)話框中按鈕的事件域仇,單擊確定按鈕退出該應(yīng)用
* 單擊取消按鈕则酝,對(duì)話框?qū)⒁苿?dòng)至底部消失
*/
private void initEvent() {
button_determine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss(); //對(duì)話框移動(dòng)到底部消失
finish(); //關(guān)閉當(dāng)前應(yīng)用
}
});
button_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss(); //對(duì)話框移動(dòng)到底部消失
}
});
}
}