http://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視窗彈出動畫
<!-- 彈出時動畫 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<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視窗退出動畫
<!-- 退出時動畫效果 -->
android:fromyscale="1.0"
android:toyscale="0.0"
在res/values下建立color
<color name="vifrification">#00000000</color> <!-- 透明 -->
設定dialog視窗layout
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/dialog_background" >
<textview
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textsize="50sp"
android:text="hello" />
</linearlayout>
main布局
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<button
android:id="@+id/button1"
android:text="點選彈出mydialog" />
<!--
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秒
-->