自定义不带文字的Loadingdialog,旋转的菊花图案

使用黄油刀实现绑定控件,绑定点击事件:

首先先添加相应依赖,在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积分,我也没办法。。。实在不会可以留言,我可以发源码。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章