Einstellung der Bilder aus url in ViewPager Android
Ich bin nach dieses tutorial für die Umsetzung ViewPager
in meinem Projekt. Ich habe das getan, mit statische Bilder erfolgreich. Jetzt will ich es ändern, so, die Bilder sind entnommen aus urls und angezeigt ViewPager
. Unten ist mein code.
Wo sollte ich hinzufügen, dass die Methode zum herunterladen von Bildern und wie Sie es
zu meinerViewPager
?
Jede Hilfe wird sehr geschätzt.
MainActivity:
public class MainActivity extends AppCompatActivity {
private ArrayList<Integer> images;
private BitmapFactory.Options options;
private ViewPager viewPager;
private View btnNext, btnPrev;
private FragmentStatePagerAdapter adapter;
private LinearLayout thumbnailsContainer;
private final static int[] resourceIDs = new int[]{R.mipmap.a, R.mipmap.b,
R.mipmap.c, R.mipmap.d, R.mipmap.e, R.mipmap.f, R.mipmap.g};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
images = new ArrayList<>();
//find view by id
viewPager = (ViewPager) findViewById(R.id.view_pager);
thumbnailsContainer = (LinearLayout) findViewById(R.id.container);
btnNext = findViewById(R.id.next);
btnPrev = findViewById(R.id.prev);
btnPrev.setOnClickListener(onClickListener(0));
btnNext.setOnClickListener(onClickListener(1));
setImagesData();
//init viewpager adapter and attach
adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
viewPager.setAdapter(adapter);
inflateThumbnails();
}
private View.OnClickListener onClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if (i > 0) {
//next page
if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount() - 1) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
} else {
//previous page
if (viewPager.getCurrentItem() > 0) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
}
}
};
}
private void setImagesData() {
for (int i = 0; i < resourceIDs.length; i++) {
images.add(resourceIDs[i]);
}
}
private void inflateThumbnails() {
for (int i = 0; i < images.size(); i++) {
View imageLayout = getLayoutInflater().inflate(R.layout.item_image, null);
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.img_thumb);
imageView.setOnClickListener(onChagePageClickListener(i));
options = new BitmapFactory.Options();
options.inSampleSize = 3;
options.inDither = false;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), images.get(i), options );
imageView.setImageBitmap(bitmap);
//set to image view
imageView.setImageBitmap(bitmap);
//add imageview
thumbnailsContainer.addView(imageLayout);
}
}
private View.OnClickListener onChagePageClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(i);
}
};
}
}
PageFragment Klasse:
public class PageFragment extends Fragment {
private int imageResource;
private Bitmap bitmap;
public static PageFragment getInstance(int resourceID) {
PageFragment f = new PageFragment();
Bundle args = new Bundle();
args.putInt("image_source", resourceID);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageResource = getArguments().getInt("image_source");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_page, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = (ImageView) view.findViewById(R.id.image);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 4;
o.inDither = false;
bitmap = BitmapFactory.decodeResource(getResources(), imageResource, o);
imageView.setImageBitmap(bitmap);
}
@Override
public void onDestroy() {
super.onDestroy();
bitmap.recycle();
bitmap = null;
}
}
ViewPager Adapter class:
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private List<Integer> images;
public ViewPagerAdapter(FragmentManager fm, List<Integer> imagesList) {
super(fm);
this.images = imagesList;
}
@Override
public Fragment getItem(int position) {
return PageFragment.getInstance(images.get(position));
}
@Override
public int getCount() {
return images.size();
}
}
- Sie möchten, laden Sie Bild aus url?
- Ja. Ich habe ein array von Bild-urls. Ich meinte ich möchte einen Satz Bilder von diesen urls nicht laden.
- im Grunde wollen Sie Standard-Bild aus diesen urls denen Sie nicht zum Bild ?
- Nein. die tutorial, die ich bekam, war für die Anzeige der Bilder aus meiner drawables-Ordner. Jetzt will ich es ändern, um die Bilder, die ich herunterladen url
- Kann ich einfach die verwenden, asynctask für diese und übergeben Sie die bitmap auf mein ViewPager?
- Warum, Dinge zu tun, die bereits verfügbar. Prüfen Sie das Universal Image Loader oder Picasso oder Gleiten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden ViewPager für Bilder, die Sie haben, um einen adapter erweitert PagerAdapter wie unten:
Sowie
xml
layout für den adapter ist:Zum Download Bilder aus
URL
verwenden SieAsyncTask
.Für die untenstehenden Beispiel DownloadImageFromAsyncTask.
Setzen Sie Ihre url über url.
für die, die Sie Hinzugefügt haben, um die Erlaubnis in AndroidManifest.xml Datei
IMO sollten Sie Ihr Bild hier, Ihr
imageResource
ist IhreimgUrl
und mit einer lib wie:UniversalImageLoader
,Volley
,Picasso
... wir haben viele libs zu laden Bild mit url.sollten Sie rufen die picdownloadertask in onViewCreated()
Klasse PicDownloaderTask extends AsyncTask {
dies ist die Methode, um Bilder von url
Ich benutze Picasso in der Bibliothek, wenn ich muss-image aus einer URL. Es ist extrem einfach zu bedienen.
Können Sie sehen, Referenzen und download-library aus dieser, Picasso
Hoffe, es ist hilfreich.
Diesen code verwenden, um download und zeigen auf Bildansicht.
hinzufügen internet-Berechtigung AndroidManifest.xml.
sehen diese link für mehr Details
erstellen Sie eine asynchrone Aufgabe und laden Sie das Bild im tun, im hintergrund