使用黃油刀實現綁定控件,綁定點擊事件:
首先先添加相應依賴,在APP下的build.gradle的dependencies中添加一下Butterknife依賴:
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
這個依賴可以不添加,不添加的話就使用傳統的findviewbyid來獲取控件就可以了。我這邊只是想試試這個Butterknife(黃油刀)好不好用。
==========================================================================
正式開始:
首先是寫Loadingdialog的佈局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/dialog_default_bg"
android:gravity="center"
android:minHeight="120dp"
android:minWidth="120dp"
android:orientation="vertical"
android:padding="10dp">
<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
android:src="@drawable/list_loading" />
<TextView
android:id="@+id/tipTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="#ffffff"
android:visibility="gone" />
</LinearLayout>
定製黑色圓角的背景:dialog_default_bg.xml 放在drawable文件夾中:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 設置ListView背景Item背景 -->
<solid android:color="#000000" />
<!-- 設置邊緣四周顏色 以及邊緣線的寬度 -->
<stroke
android:width="0.8dip"
android:color="#00000000"
android:dashGap="0.0dip"
android:dashWidth="1.0dip" />
<padding
android:bottom="1.0dip"
android:left="1.0dip"
android:right="1.0dip"
android:top="1.0dip" />
<corners android:radius="5.0dip" />
</shape>
加載動畫:dialog_loading_animation.xml 在res下創建anim文件,放在裏面
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
/**
<rotate
android:duration="1000"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="-1"
android:repeatMode="restart"
android:startOffset="-1"
android:toDegrees="+360" />
</set>
自定義dialog樣式:在styles.xml中添加loading_dialog樣式:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
//主要是下面這部分定製樣式
<style name="loading_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
所有準備的佈局文件,動畫,dialog樣式寫完之後,就可以寫具體的類MyLoadingDialog.Java了:
package com.tissmarthome.summarytest;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyLoadingDialog {
private static MyLoadingDialog instance;
private Context mContext;
private Dialog loadingDialog = null;
public MyLoadingDialog(Context mContext) {
this.mContext = mContext;
}
public static MyLoadingDialog getInstance(Context mContext) {
if (instance == null) {
instance = new MyLoadingDialog(mContext);
}
return instance;
}
/**
* 得到自定義的progressDialog(不帶文字提示)
*
* @param context
*/
public void createLoadingDialog(Context context) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.loading_dialog, null);// 得到加載view
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加載佈局
ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
// 加載動畫
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(context, R.anim.dialog_loading_animation);
// 使用ImageView顯示動畫
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
loadingDialog = new Dialog(context, R.style.loading_dialog);// 創建自定義樣式dialog
loadingDialog.setCancelable(true);// 不可以用“返回鍵”取消
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));// 設置佈局
loadingDialog.show();
}
/**
* 得到自定義的progressDialog(帶文字提示)
*
* @param context
* @param msg
*/
public void createLoadingDialog(Context context, String msg) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.loading_dialog, null);// 得到加載view
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加載佈局
ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字
tipTextView.setVisibility(View.VISIBLE);
// 加載動畫
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(context, R.anim.dialog_loading_animation);
// 使用ImageView顯示動畫
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
tipTextView.setText(msg);// 設置加載信息
loadingDialog = new Dialog(context, R.style.loading_dialog);// 創建自定義樣式dialog
// loadingDialog.setCancelable(false);// 不可以用“返回鍵”取消
loadingDialog.setCanceledOnTouchOutside(false);
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));// 設置佈局
loadingDialog.show();
}
/**
* 關閉等待的dialog
*/
public void CloseDialog() {
if (loadingDialog != null) {
loadingDialog.cancel();
}
}
}
自定義loadingdialog寫完後就可以在activity中調用了,這個是我的mainactivity的佈局文件,activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="彈出dialog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.344" />
<Button
android:id="@+id/btn_dialog_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="彈出帶文字的dialog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
MainActivity.java:
package com.tissmarthome.summarytest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
MyLoadingDialog dialog;
MyLoadingDialog dialog2;
/* @BindView(R.id.btn_dialog)
public Button button;*/
@OnClick(R.id.btn_dialog)
public void btn_dialog(){
dialog.createLoadingDialog(MainActivity.this);
}
@OnClick(R.id.btn_dialog_text)
public void dialogWithText(){
dialog2.createLoadingDialog(MainActivity.this,"寫上你想要的文字");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
dialog = MyLoadingDialog.getInstance(MainActivity.this);//加載中的動畫dialog
dialog2 = MyLoadingDialog.getInstance(MainActivity.this);
}
}
注意,這裏的兩個按鈕的獲取和賦予點擊事件我是用黃油刀Butterknife來實現的,不懂的可以自己百度一下,或者使用傳統的findviewbyid()和setOnClickListen()。
項目地址:https://download.csdn.net/download/qq_38306233/11041374
系統設定的5積分,我也沒辦法。。。實在不會可以留言,我可以發源碼。