从今天起,我将为大家带来Android开发学习系列文章,与大家一起来学习Android应用开发的相关知识。首先,我们来学习一个简单的例子Gallery。Gallery是一个被称之为画廊的控件,主要用于在应用中显示一组图片,是开发相册或者图片浏览器时十分重要的一个控件。下面,我们正式开始这个例子的学习。
首先构建布局页面,布局代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Gallery
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
在这个布局中,我们使用了LineLayout线性布局,布局方向为垂直方向,在整个页面中只有一个Gallery控件。
与之对应的后台文件代码如下:
package com.android.gallery;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.widget.Gallery;
public class MainActivity extends Activity {
int[] Images={R.drawable.image1,R.drawable.image2,R.drawable.image3,
R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image10,
R.drawable.image13,R.drawable.image16,R.drawable.image17,
R.drawable.image18,R.drawable.image19,R.drawable.image21,
R.drawable.image22,R.drawable.image23,R.drawable.image24,
R.drawable.image25,R.drawable.image28,R.drawable.image27,R.drawable.image29};
Gallery g;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
g=(Gallery)findViewById(R.id.gallery);
ImageAdapter adapter=new ImageAdapter(this,Images);
g.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在上面这段代码中,我们定义了一个继承于BaseAdapter的类,这个类主要的作用是为Gallery控件提供一个显示数据的适配器,在Android中BaseAdapter是所有数据适配器的父类,当我们要为一个控件提供自定义适配器时,首先就要继承BaseAdapter类并实现其中的getItem()、getItemId()、GetView()方法,其中getView()是最为重要的方法,用于向一个View对象提供数据,在Android,所有的控件都继承于View类。我们将这个类定义为ImageAdapter,代码如下:
package com.android.gallery;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.Gallery.LayoutParams;
import android.widget.ImageView;
import android.content.Context;
public class ImageAdapter extends BaseAdapter
{
private int[] Images;
private Context Context;
public ImageAdapter(Context c,int[] images)
{
this.Images=images;
this.Context=c;
}
@Override
public int getCount()
{
return Images.length;
}
@Override
public Object getItem(int position)
{
ImageView i=new ImageView(this.Context);
i.setBackgroundResource(Images[position]);
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent)
{
ImageView Image=new ImageView(this.Context);
Image.setImageResource(Images[position]);
Image.setScaleType(ImageView.ScaleType.FIT_XY);
Image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
Image.setAdjustViewBounds(true);
return Image;
}
}
本程序最终真机运行情况如下图: