天天看點

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秒

 -->

繼續閱讀