Android自定义控件——仿微信半透明加载框

来源:互联网 发布:阿里云华北2 编辑:程序博客网 时间:2024/05/23 00:07

在我们的app中不免回遇到耗时操作,这时我们给个加载框进行过度,使用户体验大大加强。

一、CustomDialog类的编写

package com.daqsoft.jingguan.weight;import android.app.Dialog;import android.content.Context;import android.view.KeyEvent;import android.view.WindowManager;import android.widget.TextView;import com.daqsoft.jingguan.R;/** * 自定义透明的dialog */public class CustomDialog extends Dialog{    private String content;    public CustomDialog(Context context, String content) {        super(context, R.style.CustomDialog);        this.content=content;        initView();    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        switch (keyCode){            case KeyEvent.KEYCODE_BACK:                if(CustomDialog.this.isShowing())                    CustomDialog.this.dismiss();                break;        }        return true;    }    private void initView(){        setContentView(R.layout.dialog_view);        ((TextView)findViewById(R.id.tvcontent)).setText(content);        setCanceledOnTouchOutside(true);        WindowManager.LayoutParams attributes = getWindow().getAttributes();        attributes.alpha=0.9f;        getWindow().setAttributes(attributes);        setCancelable(false);    }}

二、建立自定义style

    <!-- 自定义dialog的样式 -->    <style name="CustomDialog">        <item name="android:windowFrame">@null</item><!--边框-->        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->        <item name="android:windowIsTranslucent">false</item><!--半透明-->        <item name="android:windowNoTitle">true</item><!--无标题-->        <item name="android:windowBackground">@drawable/bg_dialog_custom</item><!--背景透明-->        <item name="android:backgroundDimEnabled">false</item><!--模糊-->        <item name="android:backgroundDimAmount">0.6</item>    </style>

三、背景drawable/bg_dialog_custom

在drawable中建立bg_dialog_custom.xml文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <solid android:color="#ff333333" />    <corners android:radius="5dp" /></shape>

四、layout布局dialog_view

<!-- 加载对话框布局 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="horizontal"    android:padding="10dp">    <ProgressBar        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:indeterminateDrawable="@drawable/indeterminate_drawable"        android:indeterminateDuration="1800" />    <TextView        android:id="@+id/tvcontent"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingLeft="10dp"        android:paddingRight="10dp"        android:text="加载中"        android:textColor="#ffffff"        android:textSize="14sp" /></LinearLayout>

上面的android:indeterminateDrawable=”@drawable/indeterminate_drawable”就是给ProgressBar加一个样式

五、ProgressBar加一个样式

建立文件indeterminate_drawable.xml放入drawable文件夹下

<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@mipmap/loading"    android:fromDegrees="0"    android:pivotX="50%"    android:pivotY="50%"    android:toDegrees="360"></rotate>

加载的图片这里下载,下载后放入mipmap-xhdpi中

六、使用

上面基本就把一个自定义半透明的加载框写完了,怎么使用呢,一般我们把他建立在Baseactivity中

配置如下

 private CustomDialog logDialog; //方法     //下面是加载框    public void showLoadingDialog() {        if (logDialog == null) {            logDialog = new CustomDialog(this,"数据加载中");        }        logDialog.show();    }    public void dismissLoadingDialog() {        if (logDialog != null) {            logDialog.dismiss();        }    }

这样之后使用就太方便了,对应的Activity继承BaseActivity直接调用上面方法即可实现

原创粉丝点击