Gallery 模擬結果:
備註:向左向右均可滑動,滑動長度趨近於無限,大約可滑動2^30/選項次
MainActivity.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery;
import android.app.Activity;
public class MainActivity extends Activity implements OnItemClickListener
{
private Gallery gvCam;
private ImageAdapter mAdapter;
// private int[] image = {R.drawable.dafault_video, R.drawable.dafault_video, R.drawable.dafault_video, R.drawable.dafault_video};
private String[] imgText = {"CH1", "CH2", "CH3", "CH4"};
private ArrayList<Map<String,Object>> List = new ArrayList<Map<String,Object>>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//insert the image or the bitmap or the text
for(int i = 0;i<4;i++)
{
Map<String, Object> map = new HashMap();
// map.put("CamImage", image[i]);
map.put("CamName", imgText[i]);
List.add(map);
}
//
//initial UI
gvCam = (Gallery) findViewById(R.id.xml_gyCam);
mAdapter = new ImageAdapter(this ,
List,
R.layout.gallery_view,
new String[]{"CamImage", "CamName"},
new int[]{R.id.xml_ivCamImage,
R.id.xml_tvCamName});
gvCam.setOnItemClickListener(this);
gvCam.setAdapter(mAdapter);
gvCam.setSelection((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2) % List.size());
//
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
// TODO Auto-generated method stub
//check click item
Log.e("GalleryExample","Your clicked item = "+position % List.size());
//
}
}
ImageAdapter.java
import java.util.ArrayList;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ImageAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
private ArrayList<Map<String, Object>> list;
private int layoutID;
private String flag[];
private int ItemIDs[];
public ImageAdapter(Context context, ArrayList<Map<String, Object>> listItems, int layoutID, String flag[], int ItemIDs[])
{
this.mInflater = LayoutInflater.from(context);
this.list = listItems;
this.layoutID = layoutID;
this.flag = flag;
this.ItemIDs = ItemIDs;
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
if (position >= list.size())
{
position = position % list.size();
}
return position;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
if (position >= list.size())
{
position = position % list.size();
}
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
if (position >= list.size())
{
position = position % list.size();
}
convertView = mInflater.inflate(layoutID, null);
for (int i = 0; i < flag.length; i++)
{
if (convertView.findViewById(ItemIDs[i]) instanceof ImageView)
{
ImageView iv = (ImageView) convertView.findViewById(ItemIDs[i]);
if(list.get(position).get(flag[i]) != null)
{
if(list.get(position).get(flag[i]) instanceof Bitmap)
{
iv.setImageBitmap((Bitmap) list.get(position).get(flag[i]));
}
else
{
iv.setImageResource((Integer) list.get(position).get(flag[i]));
}
}
}
else if (convertView.findViewById(ItemIDs[i]) instanceof TextView)
{
TextView tv = (TextView) convertView.findViewById(ItemIDs[i]);
tv.setText((String) list.get(position).get(flag[i]));
}
}
return convertView;
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical" >
<Gallery
android:id="@+id/xml_gyCam"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
gallery_view.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#000000" >
<ImageView
android:id="@+id/xml_ivCamImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="10dp"
android:src="@drawable/dafault_video" />
<TextView
android:id="@+id/xml_tvCamName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/xml_ivCamImage"
android:layout_alignTop="@+id/xml_ivCamImage"
android:layout_marginRight="15dp"
android:text="CH"
android:textColor="#00FF54"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gallery_example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.gallery_example.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
default_video.png