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谢谢,但我已经试过了,没有用