【问题标题】:Android - Add three dots animation on Progress DialogAndroid - 在进度对话框上添加三个点动画
【发布时间】:2017-03-23 10:35:26
【问题描述】:

我正在处理单击按钮时会弹出的进度对话框。

我已经得到了 3 点动画(使用 JumpingBeans)。

但是现在,我想将它添加到 Android 进度对话框的标题中,我认为这是不可能的,不是吗?或者如何将文本视图(移动点)附加到进度对话框?

三个点按钮没有动画,制作这个自定义进度对话框的最佳方法是什么?

我试图在其中创建一个带有 ProgressBar 和 TextView 的 DialogFragment,但是当我调用 setMax 和 setProgress 时,它总是出现 NPE 错误(空指针异常)。

有没有更简单或更好的方法来处理这个带有点动画的自定义对话框片段?

这是图片(我想让点移动)

【问题讨论】:

  • 嗨@DixitPatel,感谢您的光临,我已经尝试了spots-dialog,但这不是我想要的,目的是让上图中的三个点移动
  • 我应该请求对话框功能 NO_TITLE,并将 setCustomView() 放到对话框上,自定义视图可以具有您想要的设计,因此您可以将带有点视图动画的 textViewTitle 放在它旁边。PD :您可以对 dialog 和 dialogFragment 执行此操作
  • @marcosE。看起来合法,我会试一试,并会通知你更新

标签: java android animation mobile


【解决方案1】:

这是我通过在单独的线程上更新消息来解决它的方法。

似乎这也适用于标题:

主要活动:

public class SplashActivity extends Activity {

    public final static long RUN_TIME = 30000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_splash);

        gotoMain();
    }

    private void gotoMain() {

        final String messagePrefix = "Loading ";
        final ProgressDialog startupProgressDialog =
                ProgressDialogUtil.createProgressDialog(
                        SplashActivity.this,

                        // space added on init so text doesn't shift when adding chars for first time
                        messagePrefix + "      "
                );

        startupProgressDialog.setTitle(null);
        startupProgressDialog.show();

        Thread thread = new Thread() {
            @Override
            public void run() {
                ProgressDialogUtil
                        .runAnimatedLoadingDots(
                                SplashActivity.this,
                                messagePrefix,
                                startupProgressDialog);
            }
        };
        thread.start();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {

                startupProgressDialog.dismiss();

                Intent mainIntent = new Intent(SplashActivity.this, MainBottomNavActivity.class);
                SplashActivity.this.startActivity(mainIntent);
                SplashActivity.this.finish();
            }
        }, RUN_TIME);
    }

}

ProgressDialogUtil.java

public class ProgressDialogUtil {

    public static ProgressDialog createProgressDialog(Context context, String message) {
        ProgressDialog dialog = new ProgressDialog(context, R.style.DialogTheme1);
        dialog.setTitle("App Initialization");
        dialog.setMessage(message);
        dialog.setCancelable(false);
        return dialog;
    }

    public static void runAnimatedLoadingDots(Activity activity, String messagePrefix, final ProgressDialog progressDialog) {

        int dotsCount = 0;
        while (progressDialog != null && progressDialog.isShowing()) {

            dotsCount++;
            dotsCount = dotsCount % 5; // looks good w/4 dots

            try {
                Thread.sleep(300);
            }
            catch (InterruptedException iEx) {}

            final StringBuffer updateValue = new StringBuffer(messagePrefix);
            for (int i = 0; i < dotsCount; i++) {
                updateValue.append('.');
            }

            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.setMessage(updateValue.toString());
                }
            });
        }

    }
}

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多