2016-06-03 3 views
0

Wie kann ich die Bilder zuerst herunterladen und in Cach platzieren und wenn jemand Taste gedrückt, dann wird das Bild direkt ohne Verzögerung angezeigt.Wie man (Bibliothek) Glide Bilder schneller lädt? Android

Warum? Immer wenn ich auf den Knopf klicke, habe ich eine Verzögerung von ein paar Sekunden, weil sie aus dem Internet geladen werden. Es braucht Zeiten, deshalb möchte ich, dass sie zuerst geladen und zwischengespeichert werden. Wenn also jemand auf den Knopf geklickt hat, wird er in einer Sekunde angezeigt.

Java:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

import com.bumptech.glide.Glide; 
import com.squareup.picasso.Picasso; 

import java.util.Timer; 
import java.util.TimerTask; 

public class MainActivity extends AppCompatActivity { 

private int a; 
ImageView ivImageFromUrl; 
@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ivImageFromUrl=(ImageView)findViewById(R.id.iv_image_from_url); 
} 

public void buttonOnClick(View v) { 
    // do something when the button is clicked 
    final Button button = (Button) v; 
    button.setEnabled(false); 

    Timer buttonTimer = new Timer(); 
    buttonTimer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 

Sie bei der Verzögerung von 1000 ms schauen nicht, es ist nicht wichtig, weil ich eine Verzögerung von 1 Sekunde wollen jedes Mal, wenn jemand auf die Schaltfläche geklickt wird. Ich habe die Verzögerung auch, um es so aussehen zu lassen, als ob sie laden, aber es ist nicht gut ... Manchmal muss ich 5 Sekunden warten, damit die Bilder geladen werden.

@Override 
       public void run() { 
        button.setEnabled(true); 
       } 
      }); 
     } 
    }, 1000); 
    ((Button) v).setText("Random image"); 
    a = (int) (Math.random() * 4); 

    switch (a) { 
     case 0: 

      Glide.with(this).load("imagelink").into(ivImageFromUrl); 
      break; 
     case 1: 
      Glide.with(this).load("imagelink").into(ivImageFromUrl); 
      break; 
     case 2: 
      Glide.with(this).load("imagelink").into(ivImageFromUrl); 
      break; 
     case 3: 
      Glide.with(this).load("imagelink").into(ivImageFromUrl); 
      break; 
     case 4: 
      Glide.with(this).load("imagelink").into(ivImageFromUrl); 
      break; 
    } 
} 
} 

XML:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    android:id="@+id/textView2" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Image text" 
    android:id="@+id/textView" 
    android:layout_below="@+id/textView2" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="82dp" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Image" 
    android:id="@+id/button" 
    android:onClick="buttonOnClick" 
    android:layout_below="@+id/textView" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="41dp" /> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/iv_image_from_url" 
    android:layout_alignParentBottom="true" 
    android:layout_alignRight="@+id/textView" 
    android:layout_alignEnd="@+id/textView" 
    android:layout_marginBottom="106dp" 
    android:layout_toRightOf="@+id/textView" 
    android:layout_toEndOf="@+id/textView" /> 

</RelativeLayout> 

Antwort

3

Glide eine spezielle API für Vorbelastung Bilder hat:

Glide.with(this).load(uri).preload(); 

Die Javadoc sagt:

Preloads die Ressource in den Cache-Verwendung Target.SIZE_ORIGINAL als die Zielbreite und -höhe. Entspricht dem Aufruf preload(int, int) mit Target.SIZE_ORIGINAL als die Breite und Höhe.

+0

Dies funktioniert nicht, siehe mein Problem http://stackoverflow.com/questions/37964187/preload-multiple-images-with-glide?noredirect=1#comment63375623_37964187 –

0

Ich bin mir nicht sicher, ob Sie Glide beschleunigen können.

Wenn Sie dem Benutzer einen Ladevorgang anzeigen, können Sie versuchen, einen Listener hinzuzufügen und die Bilder erst dann anzuzeigen, wenn alle bereit sind.

versuchen Sie dies:

Glide.with(this).load("imagelink").into(new GlideDrawableImageViewTarget(ivImageFromUrl) { 
       @Override 
       public void onLoadFailed(Exception e, Drawable errorDrawable) { 

        //Handle error 
       } 

       @Override 
       public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) { 

        //Hide loading, show image 
       } 
      }); 
+0

Do Ich muss eine neue Methode machen? Falls ja, muss ich den Schalter in die Methode onSourceReady stellen? –

+0

In der onResourceReady-Methode würde ich nur die Lade-Sichtbarkeit auf view.GONE setzen und die ivImageFromUrl-Sichtbarkeit auf View.VISIBLE setzen. –

Verwandte Themen