最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義Dialog實現(xiàn)加載對話框效果

 更新時間:2018年05月14日 09:41:26   作者:宿罪  
這篇文章將介紹如何定制當(dāng)今主流的對話框,通過自定義dialog實現(xiàn)加載對話框效果,具體實現(xiàn)代碼大家通過本文學(xué)習(xí)吧

前言

最近開發(fā)中用到許多對話框,之前都是在外面的代碼中創(chuàng)建AlertDialog并設(shè)置自定義布局實現(xiàn)常見的對話框,諸如更新提示等含有取消和刪除兩個按鈕的對話框我們可以通過代碼創(chuàng)建一個AlertDialog并通過它暴露的一系列方法設(shè)置我們自定義的布局和style,但有時候系統(tǒng)的AlertDialog并不能實現(xiàn)更好的定制,這時,我們就想到了自定義Dialog。通過查看AlertDialog的類結(jié)構(gòu)發(fā)現(xiàn)它也是繼承于Dialog,于是我們也可以通過繼承Dialog實現(xiàn)我們自定義的Dialog。這篇文章將介紹如何定制當(dāng)今主流的對話框,先上效果圖,給大家養(yǎng)養(yǎng)眼。

這里寫圖片描述這里寫圖片描述

代碼實現(xiàn)

1、編寫自定義布局,dialog_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:gravity="center"
       android:background="@drawable/bg_loading_dialog"
       android:layout_height="match_parent">
  <ImageView
    android:id="@+id/iv_loading"
    android:layout_width="wrap_content"
    android:src="@mipmap/ic_dialog_loading"
    android:layout_height="wrap_content"/>
  <TextView
    android:id="@+id/tv_loading"
    android:layout_width="wrap_content"
    android:layout_marginTop="20dp"
    android:text="@string/loading"
    android:textSize="16sp"
    android:textColor="@android:color/white"
    android:layout_height="wrap_content"/>
</LinearLayout>

2、繼承Dialog,覆蓋構(gòu)造方法

public class LoadingDialog extends Dialog {
  private static final String TAG = "LoadingDialog";
  private String mMessage; // 加載中文字
  private int mImageId; // 旋轉(zhuǎn)圖片id
  private boolean mCancelable;
  private RotateAnimation mRotateAnimation;
  public LoadingDialog(@NonNull Context context,String message,int imageId) {
    this(context,R.style.LoadingDialog,message,imageId,false);
  }
  public LoadingDialog(@NonNull Context context, int themeResId,String message,int imageId,boolean cancelable) {
    super(context, themeResId);
    mMessage = message;
    mImageId = imageId;
    mCancelable = cancelable;
  }
}

3、覆蓋onCreate(),初始化控件

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  initView();
}
private void initView() {
  setContentView(R.layout.dialog_loading);
  // 設(shè)置窗口大小
  WindowManager windowManager = getWindow().getWindowManager();
  int screenWidth = windowManager.getDefaultDisplay().getWidth();
  WindowManager.LayoutParams attributes = getWindow().getAttributes();
  // 設(shè)置窗口背景透明度
  attributes.alpha = 0.3f;
  // 設(shè)置窗口寬高為屏幕的三分之一(為了更好地適配,請別直接寫死)
  attributes.width = screenWidth/3;
  attributes.height = attributes.width;
  getWindow().setAttributes(attributes);
  setCancelable(mCancelable);
  TextView tv_loading = findViewById(R.id.tv_loading);
  ImageView iv_loading = findViewById(R.id.iv_loading);
  tv_loading.setText(mMessage);
  iv_loading.setImageResource(mImageId);
  // 先對imageView進(jìn)行測量,以便拿到它的寬高(否則getMeasuredWidth為0)
  iv_loading.measure(0,0);
  // 設(shè)置選擇動畫
  mRotateAnimation = new RotateAnimation(0,360,iv_loading.getMeasuredWidth()/2,iv_loading.getMeasuredHeight()/2);
  mRotateAnimation.setInterpolator(new LinearInterpolator());
  mRotateAnimation.setDuration(1000);
  mRotateAnimation.setRepeatCount(-1);
  iv_loading.startAnimation(mRotateAnimation);
}

以上代碼需要注意設(shè)置動畫旋轉(zhuǎn)中心坐標(biāo)為我們imageView的中心點,需要先對imageView進(jìn)行測量,同時初始化布局的操作請放在onCreate()方法中(別直接在構(gòu)造方法中初始化布局,這樣可以在Dialog要顯示的時候才初始化,即調(diào)用show方法)。

4、其他

@Override
public void dismiss() {
  mRotateAnimation.cancel();
  super.dismiss();
}
@Override
public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
  if(keyCode == KeyEvent.KEYCODE_BACK){
    // 屏蔽返回鍵
    return mCancelable;
  }
  return super.onKeyDown(keyCode, event);
}

這一步需要注意的是我們Dialog在顯示的時候就會無限重復(fù)(setRepeatCount(-1))執(zhí)行旋轉(zhuǎn)動畫,因此在Dialog消失的時候我們要取消動畫,而屏蔽返回鍵則是為了更好地讓窗口的關(guān)閉被我們的mCancelable控制。

看到這里你或許想知道我們設(shè)置的布局背景drawable,如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <corners android:radius="10dp"></corners>
  <solid android:color="@android:color/black"/>
</shape>

你可以自己設(shè)置你想要的圓角大小,也可以設(shè)置背景顏色(會被透明處理,根據(jù)我們?yōu)榇翱谠O(shè)置的透明度)。

當(dāng)然,仔細(xì)的你會發(fā)現(xiàn)我們還少了一些必要的配置,那就是窗口的style,如下:

<style name="LoadingDialog" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:backgroundDimEnabled">false</item>
</style>

•android:windowBackground:設(shè)置窗口的背景,這里設(shè)為透明;
•android:backgroundDimEnabled:設(shè)置窗口是否變暗(true變暗,false不變暗,見效果圖1和2)。

最后奉上這篇文章的github:https://github.com/ydxlt/LoadingDialog

總結(jié)

以上所述是小編給大家介紹的Android自定義Dialog實現(xiàn)加載對話框效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android筆記之:onConfigurationChanged詳解

    Android筆記之:onConfigurationChanged詳解

    本篇是對Android中onConfigurationChanged的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • Android如何監(jiān)聽屏幕旋轉(zhuǎn)

    Android如何監(jiān)聽屏幕旋轉(zhuǎn)

    這篇文章主要介紹了如何監(jiān)聽Android屏幕旋轉(zhuǎn),幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-03-03
  • Android最新版本開發(fā)環(huán)境搭建圖文教程

    Android最新版本開發(fā)環(huán)境搭建圖文教程

    這篇文章主要為大家詳細(xì)介紹了Android最新版本開發(fā)環(huán)境搭建圖文教程,重點在于配置JDK,以及adt-bundle,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android實現(xiàn)WebView刪除緩存的方法

    Android實現(xiàn)WebView刪除緩存的方法

    這篇文章主要介紹了Android實現(xiàn)WebView刪除緩存的方法,實例分析了Android針對WebView操作緩存的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 深入解讀Android的Volley庫的功能結(jié)構(gòu)

    深入解讀Android的Volley庫的功能結(jié)構(gòu)

    這篇文章主要介紹了Android的Volley開發(fā)框架的功能結(jié)構(gòu),Volley是Android開發(fā)中網(wǎng)絡(luò)部分的一大利器,包含很多HTTP協(xié)議通信的相關(guān)操作,需要的朋友可以參考下
    2016-05-05
  • Android CameraX打開攝像頭預(yù)覽教程

    Android CameraX打開攝像頭預(yù)覽教程

    大家好,本篇文章主要講的是Android CameraX打開攝像頭預(yù)覽教程,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • 基于Flutter制作一個心碎動畫特效

    基于Flutter制作一個心碎動畫特效

    這篇文章主要為大家介紹了如何利用Flutter制作一個心碎動畫特效,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Flutter有一定幫助,感興趣的可以了解一下
    2022-04-04
  • Android實現(xiàn)簡單的下拉刷新pulltorefresh

    Android實現(xiàn)簡單的下拉刷新pulltorefresh

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單的下拉刷新pulltorefresh的相關(guān)代碼,具有一定的實用性和操作價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android實現(xiàn)多媒體之播放音樂

    Android實現(xiàn)多媒體之播放音樂

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)多媒體之播放音樂的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android開發(fā)中通過手機號+短信驗證碼登錄的實例代碼

    Android開發(fā)中通過手機號+短信驗證碼登錄的實例代碼

    最近在開發(fā)一個android的項目,需要通過獲取手機驗證碼來完成登錄功能,接下來通過實例代碼給大家分享手機號+短信驗證碼登錄的實現(xiàn)方法,需要的的朋友參考下吧
    2017-05-05

最新評論

祁连县| 陆河县| 鸡西市| 桂平市| 阿拉善盟| 神木县| 尼玛县| 焦作市| 包头市| 门源| 枣庄市| 宝坻区| 衡南县| 甘泉县| 扬中市| 雷州市| 讷河市| 华阴市| 肃宁县| 巴青县| 乐都县| 河曲县| 上虞市| 平阴县| 郧西县| 潮州市| 浦江县| 颍上县| 连城县| 桐庐县| 明水县| 西乌珠穆沁旗| 彰化市| 海盐县| 永和县| 大连市| 玉屏| 吐鲁番市| 云林县| 乐业县| 周宁县|