2016-08-22 7 views
0

Ich habe Image Slider mit ViewPager lernen. Dafür möchte ich, dass die Bilder dynamisch sind. Gleiten ist einfach, aber ich denke, ich benutze es nicht richtig. Hier ist, was ich versuche zu tun.Wie benutzt man glide, um ein Bild in ein Zeichenfeld zu laden?

//Initialize by default Images 
private static final Integer[] IMAGES = {R.drawable.image1,R.drawable.image2}; 

// Load images into Drawables using Glide 
     Glide.with(this) 
       .load("https://google.com/someImage1.jpg") 
        .error(R.drawable.image1) 
        .into(R.drawable.image1); 
     Glide.with(this) 
       .load("https://google.com/someImage2.jpg") 
        .error(R.drawable.image2) 
        .into(R.drawable.image2); 

// Set Again 
IMAGES[0]= R.drawable.image1; 
IMAGES[1]= R.drawable.image2; 

Aber .into(java.lang.Integer) nicht definiert ist und ich weiß, dass. Aber ich möchte etwas, das mein Problem lösen würde. Ich habe eine Slider-Ansicht. In diesem muss ich die Bilder als drawables oder etwas so übergeben. Das Laden des Bildes würde vom Adapter übernommen. Ich kann nicht direkt laden, soweit ich weiß. Gibt es eine Möglichkeit, Gleitbilder in drawable zu laden.

Auch, was ist der beste Weg, um die Bilder lokal zu fangen oder zu speichern, so dass, wenn es keine Internetverbindung gibt, immer noch der Slider reibungslos funktioniert.

Hier ist meine Adapater

public class MainPageSlideImageAdapter extends PagerAdapter { 
    private ArrayList<Integer> IMAGES; 
    private LayoutInflater inflater; 
    private Context context; 


    public MainPageSlideImageAdapter(Context context,ArrayList<Integer> IMAGES) { 
     this.context = context; 
     this.IMAGES=IMAGES; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View) object); 
    } 

    @Override 
    public int getCount() { 
     return IMAGES.size(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup view, int position) { 
     View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false); 

     assert imageLayout != null; 
     final ImageView imageView = (ImageView) imageLayout 
       .findViewById(R.id.image); 

     imageView.setImageResource(IMAGES.get(position)); 
     view.addView(imageLayout, 0); 

     return imageLayout; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view.equals(object); 
    } 

    @Override 
    public void restoreState(Parcelable state, ClassLoader loader) { 
    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

} 
+0

Wenn Sie einen Fehler erhalten, dass eine Methode nicht definiert ist, überprüfen Sie immer die Dokumentation. Die 'R.drawable'-Referenzen sind Ganzzahlen. Die Dokumentation zeigt deutlich, dass ein ImageView in –

+0

geladen wird Danke. Ich verstehe und habe Dokumentation gelesen. Bitte lesen Sie die Details, die ich hinzugefügt habe. – impossible

Antwort

-1

Anstatt das Bild im Speicher zu speichern, speichern Sie stattdessen die Adresse.

private static final String[] IMAGES = {"https://google.com/someImage1.jpg", "https://google.com/someImage2.jpg"}; 

laden Sie dann das Bild, wenn Sie instantiateItem

@Override 
public Object instantiateItem(ViewGroup view, int position) { 
    View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false); 
    assert imageLayout != null; 
    final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image); 
    Glide.with(context) 
     .load(IMAGES.get(position)) 
     .error(R.drawable.image1) 
     .into(imageView);  
    view.addView(imageLayout, 0);  
    return imageLayout; 
} 

Auch glide Speicher und Festplatten-Cache zur Verfügung stellt. Dies bedeutet, dass es in der Lage sein sollte Bilder zu zeigen, auch wenn es kein Internet gibt.

+0

Ich verstehe das. Aber ich habe Slider-Ansicht. In diesem muss ich die Bilder als drawables oder etwas so übergeben. Das Laden des Bildes würde vom Adapter übernommen. Ich kann nicht direkt laden, soweit ich weiß. – impossible

+0

@ArewegoodQ Können Sie den Code des Adapters anzeigen? – Joshua

+0

Sicher. Sehen Sie sich den Konstruktor des Adapaters an, in dem ich mit ganzen Bildern arbeite. – impossible

0

Sie in .into() sehen Sie bitte die Probe

Probe Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/myImage" 
     android:layout_width="100dp" 
     android:layout_height="100dp"/> 



</LinearLayout> 

aktualisieren

@Override 
    public Object instantiateItem(ViewGroup view, int position) { 
     View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false); 

     assert imageLayout != null; 
     final ImageView imageView = (ImageView) imageLayout 
       .findViewById(R.id.image); 

     Glide.with(this) 
       .load(IMAGES.get(position)) 
        .error(R.drawable.image2) 
        .into(imageView); 
     //imageView.setImageResource(); 
     view.addView(imageLayout, 0); 

     return imageLayout; 
    } 
die Ansicht zur Verfügung stellen müssen
+0

Ich verstehe das. Aber ich habe Slider-Ansicht. In diesem muss ich die Bilder als drawables oder etwas so übergeben. Das Laden des Bildes würde vom Adapter übernommen. Ich kann nicht direkt laden, soweit ich weiß. – impossible

+0

@ArewegoodQ aktualisiert meine Antwort von Ihrem obigen Code ich glaube, Ihre Bilder an den Adapter zu senden, so dass ich das Bild aus dem Array und laden Sie es in die Bildansicht mit glide bitte überprüfen Sie, ob es für Sie funktioniert – SaravInfern

0

imageView.setImageResource muss einfach mit einem Glide-Aufruf ersetzt werden.

Oder verwenden Sie einen ArrayAdapter von Strings für URLs, die Sie herunterladen möchten. Ich glaube nicht, dass Sie einen Zeichensatz von Glide "überschreiben" können

Verwandte Themen