android 自定義dialog彈出和消失動畫
https://308210.blog.51cto.com/298210/703682
自定義dialog窗口,根據坐標可隨意設置dialog顯示位置,實現了窗口彈出動畫
Java代碼:
package com.sunxu.org.IndividualityDialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class IndividualityDialogActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//多個Activity嵌套時用this.parent否則異常
new myDialog(IndividualityDialogActivity.this)
.showDialog(R.layout.dialog, 80, 50);
}
});
}
//自定義Dialog
class myDialog extends Dialog{
private Window window = null;
public myDialog(Context context)
{
super(context);
}
public void showDialog(int layoutResID, int x, int y){
setContentView(layoutResID);
windowDeploy(x, y);
//設置觸摸對話框意外的地方取消對話框
setCanceledOnTouchOutside(true);
show();
}
//設置窗口顯示
public void windowDeploy(int x, int y){
window = getWindow(); //得到對話框
window.setWindowAnimations(R.style.dialogWindowAnim); //設置窗口彈出動畫
window.setBackgroundDrawableResource(R.color.vifrification); //設置對話框背景為透明
WindowManager.LayoutParams wl = window.getAttributes();
//根據x,y坐標設置窗口需要顯示的位置
wl.x = x; //x小於0左移,大於0右移
wl.y = y; //y小於0上移,大於0下移
// wl.alpha = 0.6f; //設置透明度
// wl.gravity = Gravity.BOTTOM; //設置重力
window.setAttributes(wl);
}
}
}
設置窗口彈出,退出動畫在res/values下創建style
<?xml version="1.0" encoding="utf-8"?>
<!-- 設置dialog彈出,退出動畫 -->
<resources>
<style name="dialogWindowAnim" parent="android:Animation" mce_bogus="1">
<item name="android:windowEnterAnimation">@anim/dialog_enter_anim</item>
<item name="android:windowExitAnimation">@anim/dialog_exit_anim</item>
</style>
</resources>
在res/anim下創建,設置dialog窗口彈出動畫
<?xml version="1.0" encoding="utf-8"?>
<!-- 彈出時動畫 -->
<set xmlns:andro>
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="0%"
android:pivotY="100%"
android:fillAfter="false"
android:duration="400"/>
</set>
在res/anim下創建,設置dialog窗口退出動畫
<?xml version="1.0" encoding="utf-8"?>
<!-- 退出時動畫效果 -->
<set xmlns:andro>
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="0.0"
android:pivotX="0%"
android:pivotY="100%"
android:fillAfter="false"
android:duration="400"/>
</set>
在res/values下創建color
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="vifrification">#00000000</color> <!-- 透明 -->
</resources>
設置dialog窗口layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/dialog_background" >
<TextView
android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="50sp"
android:text="Hello" />
</LinearLayout>
main布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="點擊彈出myDialog" />
</LinearLayout>
<!--
android:fromXscale="1.0" 表示開始時X軸縮放比例為 1.0 (原圖大小 * 1.0 為原圖大小)
android:toXscale="0.0"表示結束時X軸縮放比例為0.0(原圖大小 *0.0 為縮小到看不見)
android:fromYscale="1.0" 表示開始時Y軸縮放比例為 1.0 (原圖大小 * 1.0 為原圖大小)
android:toYscale="0.0"表示結束時Y軸縮放比例為0.0(原圖大小 *0.0 為縮小的看不到了)
android:pivotX="50%" X軸縮放的位置為中心點
android:pivotY="50%" Y軸縮放的位置為中心點
android:duration="2000" 動畫播放時間 這裏是2000毫秒也就是2秒
-->
最後更新:2017-04-03 22:31:03