调用处
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>