真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Android中通過自定義Dialog實現(xiàn)一個加載對話框效果

怎么在Android中通過自定義Dialog實現(xiàn)一個加載對話框效果?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司專注于建陽網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供建陽營銷型網(wǎng)站建設(shè),建陽網(wǎng)站制作、建陽網(wǎng)頁設(shè)計、建陽網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造建陽網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供建陽網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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



  
  

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,如下:



  
  

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

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


  @android:color/transparent
  false

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

Android是什么

Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,由美國Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


當(dāng)前標(biāo)題:怎么在Android中通過自定義Dialog實現(xiàn)一個加載對話框效果
鏈接URL:http://weahome.cn/article/gdphdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部