Android 自定义水平进度条

在这里插入图片描述

调用处

LoadingDataDialog loadingDataDialog = new LoadingDataDialog(MainActivity.this,MainActivity.this);
loadingDataDialog.show();

drawable/myprogressbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="10dip" />
            <gradient
                android:angle="45"
                android:endColor="#EAEAEA"
                android:startColor="#EAEAEA" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="10dip" />
                <gradient
                    android:angle="45"
                    android:centerColor="#2FD2B3"
                    android:endColor="#30C0D0"
                    android:startColor="#2EE28B" />
            </shape>
        </clip>
    </item>

</layer-list>

dialog_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginStart="66dp"
    android:layout_marginEnd="66dp"
    android:layout_centerVertical="true">


    <TextView
        android:id="@+id/progesss_value1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="20%"
        android:textSize="15dp"
        android:textColor="#000"
        android:layout_centerHorizontal="true"
        android:layout_above="@+id/progesss1"/>

    <ProgressBar
        android:layout_gravity="center_horizontal"
        android:id="@+id/progesss1"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="330dp"
        android:layout_height="wrap_content"
        android:background="@drawable/myprogressbar"
        android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
        android:indeterminateOnly="false"
        android:layout_centerInParent="true"
        android:max="100"
        android:maxHeight="50dp"
        android:minHeight="16dp"
        android:progress="20"
        android:progressDrawable="@drawable/myprogressbar" />
</RelativeLayout>

LoadingDataDialog.java

public class LoadingDataDialog extends Dialog {
    
    
    private ProgressBar progesss;
    private TextView progesssValue;
    private LinearLayout full;
    private Activity activity;

    private int count = 0;

    Timer timer = new Timer();

    TimerTask task = new TimerTask() {
    
    
        @Override
        public void run() {
    
    
            if (count < 100){
    
    
                count+=20;
            }else {
    
    
                destroyTimer();         //  计时完成后,销毁计时线程
            }
            handler.sendMessage(new Message());   //  将 Message 对象发送出去
        }
    };

    //  销毁计时器线程
    private void destroyTimer() {
    
    
        if (timer != null){
    
    
            timer.cancel();
            timer = null;
        }
    }

    private Handler handler = new Handler(){
    
    
        public void handleMessage(Message msg){
    
    
            initview(count);
        }
    };

    public LoadingDataDialog(Context context, Activity activity) {
    
    
        super(context, R.style.MyDialog);
        this.activity = activity;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_loading);
        //按空白处不能取消动画
        setCanceledOnTouchOutside(false);
        Window window = getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(layoutParams);
        progesss = (ProgressBar) findViewById(R.id.progesss1);
        progesssValue = (TextView) findViewById(R.id.progesss_value1);
        timer.scheduleAtFixedRate(task,0,1000);          //  启动计时器

    }

    private void initview(int num) {
    
    

        progesss.setProgress(num);
        progesssValue.setText(new StringBuffer().append(progesss.getProgress()).append("%"));
        setPosWay1();
    }


    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
    
    
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
    
    
            setPos();
        }
    }
    private void setPosWay1() {
    
    
        progesssValue.post(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                setPos();
            }
        });
    }

    /**
     * 设置进度显示在对应的位置
     */
    public void setPos() {
    
    
        int w = activity.getWindowManager().getDefaultDisplay().getWidth();
        Log.e("w=====", "" + w);
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) progesssValue.getLayoutParams();
        int pro = progesss.getProgress();
        int tW = progesssValue.getWidth();
        if (w * pro / 100 + tW * 0.3 > w) {
    
    
            params.leftMargin = (int) (w - tW * 1.1);
        } else if (w * pro / 100 < tW * 0.7) {
    
    
            params.leftMargin = 0;
        } else {
    
    
            params.leftMargin = (int) (w * pro / 100 - tW * 0.7);
        }
        progesssValue.setLayoutParams(params);
    }
}

res/values/style.xml

    <style name="MyDialog" parent="android:style/Theme.Dialog">
        <!--背景颜色及和透明程度-->
        <item name="android:windowBackground">@color/common_dialog_bg_color</item>
        <!--是否去除标题 -->
        <item name="android:windowNoTitle">true</item>
        <!--是否去除边框-->
        <item name="android:windowFrame">@null</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--是否模糊-->
        <item name="android:backgroundDimEnabled">false</item>
    </style>

res/values/colors.xml

<resources>
    <color name="common_dialog_bg_color">#CC000000</color>
</resources>

猜你喜欢

转载自blog.csdn.net/qq_27494201/article/details/134994624