Android Progressbar赢得';不显示在ImageView上

Android Progressbar赢得';不显示在ImageView上,android,android-volley,android-progressbar,Android,Android Volley,Android Progressbar,我不知道我是否做错了什么。我的代码非常直截了当,如果你有一个进度条可以在你的任何应用程序中加载图像,我想举一个例子来说明你们是如何工作的,谢谢!我正在使用截击的图像加载器,而进度条从未出现过 holder.mProgressBar.setVisibility(View.VISIBLE); if (video.thumbnail != null) { mImageLoader.get(video.thumbnail, new ImageLoader.Imag

我不知道我是否做错了什么。我的代码非常直截了当,如果你有一个进度条可以在你的任何应用程序中加载图像,我想举一个例子来说明你们是如何工作的,谢谢!我正在使用截击的图像加载器,而进度条从未出现过

        holder.mProgressBar.setVisibility(View.VISIBLE);
    if (video.thumbnail != null) {
        mImageLoader.get(video.thumbnail, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                holder.mProgressBar.setVisibility(View.GONE);
                holder.mScreenShot.setImageBitmap(response.getBitmap());
            }

            @Override
            public void onErrorResponse(VolleyError error) {
                holder.mProgressBar.setVisibility(View.GONE);
            }
        });
    }
我的XML

            <RelativeLayout
            android:id="@+id/image_load"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:background="@android:color/darker_gray"
                android:id="@+id/thumbnail"
                android:layout_width="match_parent"
                android:layout_height="@dimen/album_cover_height"
                android:clickable="true"
                android:foreground="?attr/selectableItemBackgroundBorderless"
                android:scaleType="fitXY" />

            <ProgressBar
                android:visibility="gone"
                android:id="@+id/progressBar"
                style="?android:attr/progressBarStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true" />

        </RelativeLayout>

请参阅上一个问题,了解
onResponse(ImageLoader.ImageContainer response,boolean isImmediate)工作原理的详细说明

我相信这基本上就是立即关闭你的进度条。以前没有做过这件事,但基于另一个问题,我认为您希望添加一个检查:

if(!isImmediate)
 holder.mProgressBar.setVisibility(View.GONE);

当然是时间问题。我尽可能地复制了你的场景

public class MainActivity extends AppCompatActivity {
ImageView image;
ProgressBar pb;
public String url;
public ImageLoader imageLoader;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    image = (ImageView) findViewById(R.id.image);
    pb = (ProgressBar) findViewById(R.id.pb);

    RequestQueue queue = Volley.newRequestQueue(this);
    url = "http://www.hrwiki.org/w/images/thumb/d/d5/currentbad.png/180px-currentbad.png";

    imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() {
        private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20);

        @Override
        public Bitmap getBitmap(String url) {
            return cache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            cache.put(url, bitmap);
        }
    });


    show();
    new testTask().execute(imageLoader);


}

public void show() {
    image.setVisibility(View.INVISIBLE);
    pb.setVisibility(View.VISIBLE);
}

public void hide() {
    image.setVisibility(View.VISIBLE);
    pb.setVisibility(View.INVISIBLE);
}


private class testTask extends AsyncTask<ImageLoader, Void, Void> {


    @Override
    protected Void doInBackground(ImageLoader... params) {
        SystemClock.sleep(5000);

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        imageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                hide();
                image.setImageBitmap(response.getBitmap());

            }

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }
}
public类MainActivity扩展了AppCompatActivity{
图像视图图像;
ProgressBar-pb;
公共字符串url;
公共图像加载器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image=(ImageView)findviewbyd(R.id.image);
pb=(ProgressBar)findviewbyd(R.id.pb);
RequestQueue=Volley.newRequestQueue(this);
url=”http://www.hrwiki.org/w/images/thumb/d/d5/currentbad.png/180px-currentbad.png";
imageLoader=new imageLoader(队列,new imageLoader.ImageCache(){
专用最终LruCache缓存=新LruCache(20);
@凌驾
公共位图getBitmap(字符串url){
返回cache.get(url);
}
@凌驾
公共位图(字符串url、位图){
cache.put(url、位图);
}
});
show();
新建testTask().execute(imageLoader);
}
公开展览({
image.setVisibility(View.INVISIBLE);
pb.setVisibility(View.VISIBLE);
}
公共空间隐藏(){
image.setVisibility(View.VISIBLE);
pb.setVisibility(视图不可见);
}
私有类testTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(ImageLoader…参数){
系统时钟。睡眠(5000);
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
获取(url,新的imageLoader.ImageListener(){
@凌驾
public void onResponse(ImageLoader.ImageContainer响应,布尔值isImmediate){
隐藏();
setImageBitmap(response.getBitmap());
}
@凌驾
公共无效onErrorResponse(截击错误){
}
});
}
}
}

使用此布局文件:

 <FrameLayout
    android:layout_width="100dp"
    android:layout_height="100dp">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"
        android:id="@+id/image" />
    <ProgressBar
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        android:id="@+id/pb"/>
</FrameLayout>

我看到了相同的行为,直到我将异步任务放入其中,在加载映像之前基本上要等待5秒钟。这肯定表明OnResponse被调用的速度太快,以至于你看不到进度条


看起来Michelle的答案与您希望实现一些预检查逻辑的答案相同

它是否显示在xml预览中?或者将此xml包含在另一个布局中,显示我的xml预览,例如,当我同时删除holder.mProgressBar.setVisibility(View.GONE)时;代码行中出现微调器。我认为您必须先调试删除ImageLoader.ImageListener,然后再调试是否显示ProgressBar。为什么不让进度条在xml中可见,然后在响应中隐藏它并error@Audi谢谢,但我已经试过了,没有用