1. 程式人生 > >android 自定義dialog彈出和消失動畫

android 自定義dialog彈出和消失動畫

自定義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: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視窗退出動畫

<?xml version="1.0" encoding="utf-8"?>
<!-- 退出時動畫效果 -->
<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="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: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佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        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秒
 -->

相關推薦

android 定義dialog消失動畫

自定義dialog視窗,根據座標可隨意設定dialog顯示位置,實現了視窗彈出動畫 Java程式碼: package com.sunxu.org.IndividualityDialog; import android.app.Activity; import and

定義Dialog其背景陰影顯示

昨天研究了一下自定義Dialog的彈框,其實要點都是把自定義好的view用setContentView(view)的方法設定進dialog裡,首先我們先看一個簡單的自定義Dialog。 一、寫佈局檔案:custom_dialog_layout.xml(這個佈局就是一個簡單的提示內容,下面有一

android 定義登陸

 從本節將開始闡述一個完整系統Demo,從登陸--主頁--查詢展示具體詳情...這節是一個自定義登陸彈出框,接著上一節的logo全屏頁面之後將出現一個全屏的ImagView,點選彈出自定義登陸框,輸入賬號密碼提交,彈出

android定義dialog,軟體鍵盤擋住輸入區域解決

在做新浪oauth2.0認證時,裡面有一個自定義dialog的類。dialog中載入的是一一個webview。當鍵盤彈起的時候就會彈住輸入區域。 解決辦法: 在dialog的oncarete方法中加  getWindow().setSoftInputMode(WindowManager.LayoutPara

Android定義底部框ButtomDialog

先看看效果和你要的是否一樣 一 、先來配置自定義控制元件需要的資源。 1.在res資料夾下建立一個anim資料夾並建立兩個slide_in_bottom.xml、slide_out_bottom.xml檔案,負責彈框進出動畫。 <?xml version="1.0" enco

定義浮動框-自動消失

// // FadePromptView.m // // Created by wuyj on 5/27/13. // Copyright (c) 2013 wuyj. All rights reserved. // #import "FadePro

Android 定義Dialog (有圓角已適配大螢幕的廣告機)

在開發過程中,有時需要自定義的Dialog,設計的需求是,按照螢幕的比例來顯示Dialog,需要有圓角。效果如下圖。 自定義程式碼Dialog 程式碼如下: CustomDialog.class public class CustomDialog

定義PopupWindow框(帶有動畫呼叫相簿相機佈局

使用PopupWindow來實現彈出框,並且帶有動畫效果 效果一:(第二張圖)首先自定義PopupWindow public class LostPopupWindow extends PopupWindow { public Lost lost;

定義Dialog窗及軟體盤的隱藏顯示

1.佈局檔案<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

Android定義DialogDialog的顯示消失動畫

效果圖 部落格絕大時候還是為了記錄自己的一些想法跟收穫 當我們呼叫Dialog的show方法的時候系統會做哪些事情 public void show() { if (mShowing) { if

android 定義dialog的實現方法

listener params .get animator miss nim style wrap 參數 最近一直在做 java 相關的東西, 雖然一直在看 Android 但感覺有點留於理論,總這樣畢竟不行,寫的多不一定懂得多,但要想懂得多就一定要寫的多,於是今天動手寫了

Android定義Dialog多選對話框(Dialog+Listview+CheckBox)

dia bundle adapter get etl wrap 點擊 所有 技術 先放效果截圖 項目中需要有個Dialog全選對話框,點擊全選全部選中,取消全選全部取消。下午查了些資料,重寫了一下Dialog對話框。把代碼放出來。 public class MainAct

Android 定義Dialog小結

關於自定義佈局的Dialog,總是會遇到各種各樣的問題,作為一個菜鳥,想想還是打算專門開一篇總結自己遇到的各種問題。歡迎大佬們指點 自定義佈局寬度和位置問題 自定義佈局,就是自己自由地設定Dialog的樣式,所以肯定會自己寫一個Layout佈局,並把它加載出來,這才是我們想要的,但是經常會出

【舉例】Android定義Dialog——做出“確定/取消”的選擇

1、自定義Dialog的介面 <--!dialog_yesorno_for_permission.xml--> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

【舉例】Android定義Dialog——選擇一個RadioButton

1. 自定義Dialog的介面 <--!dialog_selectserver.xml--> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sch

微信小程式之 動畫 —— 定義底部

wxml: <view class='buy' bindtap='showBuyModal'>立即購買</view> <!-- 點選立即購買 彈出購買遮罩層 --> <view class="cover_screen" bindtap="hideBuyModal"

微信小程序之 動畫 —— 定義底部

modals num view radi let art time cit 點擊 wxml: <view class='buy' bindtap='showBuyModal'>立即購買</view> <!--

Android--定義Dialog,仿IOS對話方塊樣式

效果: 實現: 1.dialog_layout.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/ap

百度地圖精準定位,定義marker,定義資訊視窗。

        先說下業務場景,在資料庫查出相應的專案展示出來,然後點選專案在百度地圖上標註專案的地址,同時彈出視窗顯示相關的資訊。下面就來看看具體的實現:  1.引入百度地圖相關的API,我這裡選的是web的JavaScript API。後端的

修改dialog 隱藏的動畫

 首先在dialog 中拿到window 物件 ,然後給window物件設定動畫  上程式碼 Window window = getWindow(); window.setWindowAnimations(R.style.DialogAnimations)