android.widget.Gallery with remote Images
What you learn: You will learn how to use the Gallery-Widget (android.widget.Gallery) to display a remote images.
Difficulty: 1 of 5

Read before: :src: android.widget.Gallery - Example because this tutorial is differing just in some lines.
What it will look like:

Description: The only real difference to the :src: android.widget.Gallery - Example-Tutorial is a single function in our Custom ImageAdapter. Before we were loading the images from our project resources with this line:
Using java Syntax Highlighting
- i.setImageResource(this.myImageIds[position]);
Parsed in 0.029 seconds, using GeSHi 1.0.8.4
What we'll do now instead is the following:
Using java Syntax Highlighting
- /** URL-Strings to some remote images. */
- private String[] myRemoteImages = {
- "http://www.anddev.org/images/tiny_tutheaders/weather_forecast.png",
- "http://www.anddev.org/images/tiny_tutheaders/cellidtogeo.png",
- "http://www.anddev.org/images/tiny_tutheaders/droiddraw.png"
- };
- //...
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView i = new ImageView(this.myContext);
- try {
- /* Open a new URL and get the InputStream to load data from it. */
- URL aURL = new URL(myRemoteImages[position]);
- URLConnection conn = aURL.openConnection();
- conn.connect();
- InputStream is = conn.getInputStream();
- /* Buffered is always good for a performance plus. */
- BufferedInputStream bis = new BufferedInputStream(is);
- /* Decode url-data to a bitmap. */
- Bitmap bm = BitmapFactory.decodeStream(bis);
- bis.close();
- is.close();
- /* Apply the Bitmap to the ImageView that will be returned. */
- i.setImageBitmap(bm);
- } catch (IOException e) {
- i.setImageResource(R.drawable.error);
- Log.e("DEBUGTAG", "Remtoe Image Exception", e);
- }
- //...
Parsed in 0.034 seconds, using GeSHi 1.0.8.4
Thats it 

Full source:
"/res/layout/main.xml":
Using xml Syntax Highlighting
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Gallery id="@+id/gallery"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="bottom"
- />
- </LinearLayout>
Parsed in 0.002 seconds, using GeSHi 1.0.8.4
"/src/your_package_structure/GalleryExample.java":
Using java Syntax Highlighting
- package org.anddev.android.galleryexample;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URL;
- import java.net.URLConnection;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Gallery;
- import android.widget.ImageView;
- public class GalleryExample extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- /* Find the gallery defined in the main.xml
- * Apply a new (custom) ImageAdapter to it. */
- ((Gallery) findViewById(R.id.gallery))
- .setAdapter(new ImageAdapter(this));
- }
- public class ImageAdapter extends BaseAdapter {
- /** The parent context */
- private Context myContext;
- /** URL-Strings to some remote images. */
- private String[] myRemoteImages = {
- "http://www.anddev.org/images/tiny_tutheaders/weather_forecast.png",
- "http://www.anddev.org/images/tiny_tutheaders/cellidtogeo.png",
- "http://www.anddev.org/images/tiny_tutheaders/droiddraw.png"
- };
- /** Simple Constructor saving the 'parent' context. */
- public ImageAdapter(Context c) { this.myContext = c; }
- /** Returns the amount of images we have defined. */
- public int getCount() { return this.myRemoteImages.length; }
- /* Use the array-Positions as unique IDs */
- public Object getItem(int position) { return position; }
- public long getItemId(int position) { return position; }
- /** Returns a new ImageView to
- * be displayed, depending on
- * the position passed. */
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView i = new ImageView(this.myContext);
- try {
- /* Open a new URL and get the InputStream to load data from it. */
- URL aURL = new URL(myRemoteImages[position]);
- URLConnection conn = aURL.openConnection();
- conn.connect();
- InputStream is = conn.getInputStream();
- /* Buffered is always good for a performance plus. */
- BufferedInputStream bis = new BufferedInputStream(is);
- /* Decode url-data to a bitmap. */
- Bitmap bm = BitmapFactory.decodeStream(bis);
- bis.close();
- is.close();
- /* Apply the Bitmap to the ImageView that will be returned. */
- i.setImageBitmap(bm);
- } catch (IOException e) {
- i.setImageResource(R.drawable.error);
- Log.e("DEBUGTAG", "Remtoe Image Exception", e);
- }
- /* Image should be scaled as width/height are set. */
- i.setScaleType(ImageView.ScaleType.FIT_CENTER);
- /* Set the Width/Height of the ImageView. */
- i.setLayoutParams(new Gallery.LayoutParams(150, 150));
- return i;
- }
- /** Returns the size (0.0f to 1.0f) of the views
- * depending on the 'offset' to the center. */
- public float getScale(boolean focused, int offset) {
- /* Formula: 1 / (2 ^ offset) */
- return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
- }
- }
- }
Parsed in 0.046 seconds, using GeSHi 1.0.8.4
Regards,
plusminus








