从今天起,我将为大家带来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; } }本程序最终真机运行情况如下图: