【问题标题】:ANDROID Progress Dialog when Loading Image on Dialog/Popup在对话框/弹出窗口上加载图像时的 ANDROID 进度对话框
【发布时间】:2016-05-16 07:18:53
【问题描述】:

我有这个从 url 加载图像的工作功能。唯一的问题是它在加载图像时没有显示任何进展,只是屏幕变暗,一段时间后只显示图片。这使用户认为它不起作用。那么如何在图像加载时添加进度对话框或以任何方式显示图像正在加载?

public void showImage() {
    Dialog builder = new Dialog(this);
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
    builder.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialogInterface) {
            //nothing;
        }
    });

    ImageView imageView = new ImageView(this);
    Picasso.with(this).load("http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png").into(imageView);
    builder.addContentView(imageView, new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    builder.show();
}

【问题讨论】:

标签: java android


【解决方案1】:

尝试添加 PlaceHolder 将此添加到布局文件夹

<RelativeLayout
android:id="@+id/hoteldetails_myContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent">


<ProgressBar
    android:id="@+id/hoteldetails_progressBar"
    style="?android:attr/progressBarStyleSmall"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_gravity="center"
    android:visibility="gone"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="20dp" />

<ImageView
    android:id="@+id/hoteldetails_imageView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitXY"/>
</RelativeLayout>

这是加载代码

Picasso.with(this)
        .load(hoteImageStr)
        .error(R.drawable.loading)
        .into(img,  new com.squareup.picasso.Callback() {
            @Override
            public void onSuccess() {
                if (progress != null) {
                    progress .setVisibility(View.GONE);
                }
            }

            @Override
            public void onError() {

            }
        });

【讨论】:

    【解决方案2】:
    public void showImage() {
        Dialog builder = new Dialog(this);
        builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
        builder.getWindow().setBackgroundDrawable(
                new ColorDrawable(android.graphics.Color.TRANSPARENT));
        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                //nothing;
            }
        });
    
        final ProgressDialog progressDialog = new ProgressDialog(this);
        ImageView imageView = new ImageView(this);
        Picasso.with(this)
                .load("http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png")
                .into(imageView, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {
    
                        // The image has loaded you can make the progress bar invisible
                        if (progressDialog.isShowing())
                            progressDialog.dismiss();
                    }
    
                    @Override
                    public void onError() {
                        // Show some error message
                        if (progressDialog.isShowing())
                            progressDialog.dismiss();
                    }
                });
    
    
        builder.addContentView(imageView, new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));
        builder.show();
    
        progressDialog.setMessage("please wait");
        progressDialog.setCancelable(false);
        progressDialog.show();
    }
    

    【讨论】:

    • 我需要将progressDialog 声明为final,但是setVisibility 无法解析。
    • 现在它说方法不会覆盖其超类中的方法。
    • 哪里来的错误??我的意思是在哪条线上?
    • 试试我的编辑.. 只需写 com.squareup.picasso.Callback() 而不是 Callback()。您可能为 CallBack 导入了错误的包。或者告诉我哪个包显示为 CallBack 的导入??
    • 好的,现在它消失了,但出现了另一个错误。 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多