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秒
-->