博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实战简易教程-第十枪(画廊组件Gallery有用研究)
阅读量:6147 次
发布时间:2019-06-21

本文共 5737 字,大约阅读时间需要 19 分钟。

Gallery组件用于拖拽浏览图片,以下我们就来看一下怎样实现。

一、实现Gallery

1.布局文件非常easy:

> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/MyLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <Gallery android:id="@+id/myGallery" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>

2.自己定义适配器类,能够直接覆写BaseAdapter类中的几个方法。

package org.yayun.demo;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Gallery;import android.widget.ImageView;import android.widget.Gallery.LayoutParams;public class ImageGalleryAdapter extends BaseAdapter {	private Context context;	private int imgRes[] = new int[] { R.drawable.ispic_a, R.drawable.ispic_b,			R.drawable.ispic_c, R.drawable.ispic_d, R.drawable.ispic_e, };	public ImageGalleryAdapter(Context c) {//构造方法,用于获取上下文对象		this.context = c;	}	public int getCount() {		return imgRes.length;	}	public Object getItem(int position) {		return imgRes[position];	}	public long getItemId(int position) {		return imgRes[position];	}	public View getView(int position, View convertView, ViewGroup parent) {		ImageView img = new ImageView(this.context);		img.setBackgroundColor(0xFFFFFFFF);		img.setImageResource(this.imgRes[position]);//设置资源		img.setScaleType(ImageView.ScaleType.CENTER);//居中显示		img.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,				LayoutParams.WRAP_CONTENT));		return img;	}}

3.MainActivity.java:

package org.yayun.demo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.Gallery;public class MainActivity extends Activity {	private Gallery gallery;	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState); // 生命周期方法		super.setContentView(R.layout.main); // 设置要使用的布局管理器		gallery = (Gallery) findViewById(R.id.myGallery);		gallery.setAdapter(new ImageGalleryAdapter(this));		gallery.setOnItemClickListener(new OnItemClickListener() {			public void onItemClick(AdapterView
parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "您选择了第" + String.valueOf(position + 1) + "张图片", Toast.LENGTH_SHORT).show(); } }); }}

4.执行实比例如以下:

二、Gallery和ImageSwitcher结合

这时的Gallery我们用SimpleAdapter类完毕。

1.布局文件:

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/MyLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:gravity="bottom" android:orientation="vertical" > <ImageSwitcher android:id="@+id/imageSwitcher" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ImageSwitcher> <Gallery android:id="@+id/gallery" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:spacing="5dp" /> </LinearLayout>

2.定义显示模板:

3.MainActivity.java程序:

package org.yayun.demo;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.Gallery.LayoutParams;import android.widget.Gallery;import android.widget.ViewSwitcher.ViewFactory;public class MainActivity extends Activity {	private Gallery gallery;	private List
> list = new ArrayList
>(); private SimpleAdapter simpleAdapter; private ImageSwitcher imageSwitcher; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 生命周期方法 super.setContentView(R.layout.main); // 设置要使用的布局管理器 initAdapter(); gallery = (Gallery) findViewById(R.id.gallery); imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher); imageSwitcher.setFactory(new ViewFactory() { public View makeView() { ImageView imageView = new ImageView(MainActivity.this); imageView.setBackgroundColor(0xFFFFFFFF); imageView.setScaleType(ImageView.ScaleType.CENTER); imageView.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return imageView; } }); gallery.setAdapter(simpleAdapter); gallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView
parent, View view, int position, long id) { Map
map = (Map
) MainActivity.this.simpleAdapter .getItem(position);// 取出map MainActivity.this.imageSwitcher.setImageResource(map.get("img"));// 设置显示图片 } }); } private void initAdapter() { Field[] fields = R.drawable.class.getDeclaredFields();// Java反射机制获取全部资源图片 for (int i = 0; i < fields.length; i++) { if (fields[i].getName().startsWith("ispic_")) {// 推断开头 Map
map = new HashMap
(); try { map.put("img", fields[i].getInt(R.drawable.class)); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.list.add(map); } } simpleAdapter = new SimpleAdapter(this, this.list, R.layout.grid_layout, new String[] { "img" }, new int[] { R.id.img }); }}

4.执行实例:

你可能感兴趣的文章
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
查看>>
vue组件开发练习--焦点图切换
查看>>
浅谈OSI七层模型
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
python实现牛顿法求解求解最小值(包括拟牛顿法)【最优化课程笔记】
查看>>
js中var、let、const的区别
查看>>
腾讯云加入LoRa联盟成为发起成员,加速推动物联网到智联网的进化
查看>>
从Python2到Python3:超百万行代码迁移实践
查看>>
Windows Server已可安装Docker,Azure开始支持Mesosphere
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
微软正式发布PowerShell Core 6.0
查看>>
Amazon发布新的会话管理器
查看>>
InfoQ趋势报告:DevOps 和云计算
查看>>
舍弃Python,为什么知乎选用Go重构推荐系统?
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
must implement java.io.Serializable hessian
查看>>