2016-06-19 4 views
1

イメージスライドショーを作成するには、タイマー付きイメージスイッチャーを使用します。 私はthis blog postを読んでいますが、それは非常にはっきりしていますが、ネットワークからの画像はロードされません。 グライドライブラリでネットワークから画像を読み込みたいImageSwitcherのグライドでイメージをロードするには

これはMainActivityです:

public class MainActivity extends Activity { 
    private ImageSwitcher imageSwitcher; 

    private int[] gallery = { http://www.helloworld.com/image1.png, http://www.helloworld.com/image2.png, http://www.helloworld.com/image3.png, 
      http://www.helloworld.com/image4.png, }; 

    private int position; 

    private static final Integer DURATION = 2500; 

    private Timer timer = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher); 
     imageSwitcher.setFactory(new ViewFactory() { 

      public View makeView() { 
       return new ImageView(MainActivity.this); 
      } 
     }); 

     // Set animations 
     // https://danielme.com/2013/08/18/diseno-android-transiciones-entre-activities/ 
     Animation fadeIn = AnimationUtils.loadAnimation(this, R.anim.fade_in); 
     Animation fadeOut = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
     imageSwitcher.setInAnimation(fadeIn); 
     imageSwitcher.setOutAnimation(fadeOut); 
    } 

    // ////////////////////BUTTONS 
    /** 
    * starts or restarts the slider 
    * 
    * @param button 
    */ 
    public void start(View button) { 
     if (timer != null) { 
      timer.cancel(); 
     } 
     position = 0; 
     startSlider(); 
    } 

    public void stop(View button) { 
     if (timer != null) { 
      timer.cancel(); 
      timer = null; 
     } 
    } 

    public void startSlider() { 
     timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 

      public void run() { 
       // avoid exception: 
       // "Only the original thread that created a view hierarchy can touch its views" 
       runOnUiThread(new Runnable() { 
        public void run() { 
         imageSwitcher.setImageResource(gallery[position]); 
         position++; 
         if (position == gallery.length) { 
          position = 0; 
         } 
        } 
       }); 
      } 

     }, 0, DURATION); 
    } 

    // Stops the slider when the Activity is going into the background 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (timer != null) { 
      timer.cancel(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (timer != null) { 
      startSlider(); 
     } 

    } 

} 

私はグライドで画像をロードしようとしたが、私は何をすべきかわかりません。

答えて

4

それはあなたが必要とするすべてはあなたの方法imageSwitcher.getCurrentView()によりImageSwitcherから取得することができますImageViewGlideを使用してイメージをロードすることで、行うのは非常に簡単です。だから、次のコードにごrunOnUiThread方法のrun内のコードを交換する必要があります。

Glide.with(MainActivity.this) 
    .load(gallery[position]) 
    .asBitmap() 
    .listener(new RequestListener<String, Bitmap>() { 
     @Override 
     public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) { 
      return false; 
     } 

     @Override 
     public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { 
      position++; 
      if (position == gallery.length) { 
       position = 0; 
      } 
      imageSwitcher.setImageDrawable(new BitmapDrawable(getResources(), resource)); 
      return true; 
     } 
    }).into((ImageView) imageSwitcher.getCurrentView()); 

はまた、適切なURLを(あなたが今私が見るそこにいくつかのダミーのURLを持っている)を使用して、画像のURLを置き換えることを忘れないでください。したがって、gallery配列はString[]配列にする必要があります。

AndroidManifest.xmlandroid.permission.INTERNETを含めることも忘れないでください。

最後に、ImageSwitcherandroid:layout_widthプロパティをxmlのmatch_parentに変更する必要があります。それ以外の場合、Glideは画像を読み込みません。

関連する問題