天天看点

android 自定义dialog弹出和消失动画

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秒

 -->

继续阅读