Jul 21, 2011

Implement a photo bar using android.widget.Gallery, with custom BaseAdapter, and custom object.

In this example, I will implement a photo bar using android.widget.Gallery.

a photo bar using android.widget.Gallery, with custom BaseAdapter, and custom object.

We will implement MyAdapter extends BaseAdapter, it hold a ArrayList of our custom object ImageItem. In the constructor of MyAdapter, an empty ArrayList of ImageItem will be new. And a method addImageItem is implemented to add new items into the ArrayList.

insertDummyImageItem(3) is a dummy method to add new items into the ArrayList of MyAdapter. As a example, all items have the same bitmap - R.drawable.icon. After items inserted, we have to call notifyDataSetChanged() of the MyAdapter to update the photo bar.

In such a approach, we can add new item on runtime. We will do more on coming post "Update BaseAdapter in backgrond Thread, to insert Gallery items in run-time.".

package com.AndroidPhotoBar;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class AndroidPhotoBarActivity extends Activity {

ArrayList<ImageItem> arrayImageItem;
MyAdapter myAdapter;

public class ImageItem {

Bitmap bitmapImage;

ImageItem(){
//To simplify, we use a default image here
bitmapImage = BitmapFactory.decodeResource(
AndroidPhotoBarActivity.this.getResources(), R.drawable.icon);
}

public Bitmap getImage(){
return bitmapImage;
}

}

Gallery myPhotoBar;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myPhotoBar = (Gallery)findViewById(R.id.photobar);

myAdapter = new MyAdapter(this); //init myAdapter without ImageItem

//insert dummy ImageItem into myAdapter
insertDummyImageItem(2);
myPhotoBar.setAdapter(myAdapter);

//insert dummy ImageItem into myAdapter in Run time
insertDummyImageItem(3);
myAdapter.notifyDataSetChanged();

}

private void insertDummyImageItem(int cnt){

//Insert dummy ImageItem into myAdapter
for(int i = 0; i < cnt; i++){
myAdapter.addImageItem(new ImageItem());
}

}

public class MyAdapter extends BaseAdapter {

Context context;
ArrayList<ImageItem> _arrayImageItem;

MyAdapter(Context c){
context = c;
_arrayImageItem = new ArrayList<ImageItem>();
}

public void addImageItem(ImageItem item){
_arrayImageItem.add(item);
}

public int getCount() {
// TODO Auto-generated method stub
return _arrayImageItem.size();
}

public Object getItem(int position) {
// TODO Auto-generated method stub
return _arrayImageItem.get(position);
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView imageView;
imageView = new ImageView(context);

imageView.setLayoutParams(new Gallery.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageBitmap(_arrayImageItem.get(position).getImage());

return imageView;
}

}
}


<?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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Gallery
android:id="@+id/photobar"
android:layout_width="fill_parent"
android:layout_height="150dp"
/>
</LinearLayout>


next post:
- Update BaseAdapter in backgrond Thread, to insert Gallery items in run-time.

related article:
- Implement Horizontal ListView using android.widget.Gallery, with custom BaseAdapter.

No comments:

Post a Comment

Infolinks In Text Ads