创建Android图片画廊应用

Android平台上,创建一个图片画廊应用是一种常见的需求。这种应用可以让用户横向滚动浏览一系列图片,并在点击某张图片时放大显示。本文将介绍如何实现这样一个应用。

在本示例应用中,创建了一个包含固定图片的画廊。这些图片被复制到项目的res/drawable文件夹中。用户可以通过横向滚动来浏览所有图片,点击画廊中的图片可以在ImageView控件中以更大的尺寸显示。

使用代码

MainActivity.java文件中,通过以下方式引用res/drawable文件夹中的图片:

Integer[] imageIDs = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7};

activity_main.xml文件中,创建了一个包含TextViewGalleryImageView控件的线性布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="My Image Gallery"/> <Gallery android:id="@+id/mygallery" android:layout_marginLeft="15dp" android:layout_marginTop="25dp" android:layout_width="match_parent" android:layout_height="wrap_content"/> <ImageView android:id="@+id/myimage" android:layout_marginLeft="15dp" android:layout_marginTop="25dp" android:layout_width="330dp" android:layout_height="250dp" android:scaleType="fitXY"/> </LinearLayout>

res/values文件夹中添加了一个名为attrs.xml的文件,并在其中添加了以下代码:

<resources> <declare-styleable name="MyGallery"> <attr name="android:galleryItemBackground"/> </declare-styleable> </resources>

MainActivity.java文件中,通过以下方式获取Gallery对象:

Gallery gallery = (Gallery) findViewById(R.id.mygallery); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemClickListener(this);

在上面的代码中,使用Gallery类的setAdapter()方法来指定画廊使用的数据和数据格式,使用内部类ImageAdaptersetOnItemClickListener()方法注册了一个回调方法,当画廊中的图片被点击时会被调用。

ImageAdapter内部类代码

以下是ImageAdapter内部类的代码:

public class ImageAdapter extends BaseAdapter { Context ctx; int itemBackground; public ImageAdapter(Context ctx) { this.ctx = ctx; TypedArray array = obtainStyledAttributes(R.styleable.MyGallery); itemBackground = array.getResourceId(R.styleable.MyGallery_android_galleryItemBackground, 0); array.recycle(); } public int getCount() { return imageIDs.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(ctx); imageView.setImageResource(imageIDs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); imageView.setBackgroundResource(itemBackground); return imageView; } }

在上面的代码中,ImageAdapter内部类继承自BaseAdapter类。在该类的构造函数中,使用obtainStyledAttributes()方法获取上下文中的主题样式属性,并存储在TypedArray对象中。recycle()方法用于重用对象。getView()方法返回一个ImageView,代表在画廊中显示的图片,基于位置。setImageResource()方法设置一个drawable作为这个ImageView的内容。setScaleType()方法指定图片在ImageView中的大小和位置。setLayoutParams()方法指定ImageView的布局参数。setBackgroundResource()方法设置ImageView的背景。

onItemClick回调方法

以下是onItemClick()回调方法的代码,当画廊中的图片被点击时,该方法会被调用,并在ImageView对象中显示选中的图片:

public void onItemClick(AdapterView adapterView, View view, int position, long id) { ImageView imageView = (ImageView) findViewById(R.id.myimage); imageView.setImageResource(imageIDs[position]); }

以下是MainActivity.java文件的完整代码:

package com.example.azim.mygalleryapp; import android.content.Context; import android.content.res.TypedArray; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { Integer[] imageIDs = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Gallery gallery = (Gallery) findViewById(R.id.mygallery); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemClickListener(this); } public void onItemClick(AdapterView adapterView, View view, int position, long id) { ImageView imageView = (ImageView) findViewById(R.id.myimage); imageView.setImageResource(imageIDs[position]); } public class ImageAdapter extends BaseAdapter { Context ctx; int itemBackground; public ImageAdapter(Context ctx) { this.ctx = ctx; TypedArray array = obtainStyledAttributes(R.styleable.MyGallery); itemBackground = array.getResourceId(R.styleable.MyGallery_android_galleryItemBackground, 0); array.recycle(); } public int getCount() { return imageIDs.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(ctx); imageView.setImageResource(imageIDs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); imageView.setBackgroundResource(itemBackground); return imageView; } } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485