2017-09-27 10 views
1

私は何か間違っているのだろうかと思います。私のコードはかなり簡単ですし、アプリケーションのどれかで画像をロードするためのプログレスバーがあれば、どのように動作させるかの例が好きです。私はボレーのimageloaderを使用していますし、プログレスバーは決してImageViewにプログレスバーが表示されない

 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> 
+1

xmlプレビューで表示されていますか?または、このXMLを別のレイアウトに含めようとしています – Audi

+0

たとえば、holder.mProgressBar.setVisibility(View.GONE)と両方を削除すると、XMLプレビューが表示されます。コードからの行、スピナーが表示されます –

+0

まず、ImageLoader.ImageListenerを削除してProgressBarが表示されているかどうかをデバッグする必要があると思います。 – kimkevin

答えて

0

:前が、私はあなたがチェックを追加したいと思います他の質問に基づいて、この特定の事を行っていません。私は可能な限りあなたのシナリオを複製しました。

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) { 

      } 
     }); 
    } 
} 

}

このレイアウトファイルの場合:

<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の答えには、いくつかの事前チェックロジックを実装するために探すものがあります。

0

onResponse(ImageLoader.ImageContainer response, boolean isImmediate)が作動しているかの詳細な説明については、この前の質問を参照してください表示されます。

Volley, How many times the onResponse in ImageLoader.ImageListener called

私はそれだけですぐにプログレスバーをオフにする、基本的であると考えています。確かにタイミングの問題を

if(!isImmediate) 
holder.mProgressBar.setVisibility(View.GONE); 
関連する問題