Android ImageSwitcher和Gallery的使用
前几天,听说室友的老师要求他们做一个图片效果。其效果如下图所示(可左右滑动切换图片):
我当时晃眼一看,第一感觉好高级的样子。我还没做过这种效果呢,但室友说他们同学已经有人做出来了,我觉得既然有人做出来了,那么我也应该做出来,于是上个星期五的时候在教室研究了一下午,最后在网上找到了两个Demo都与这个效果类似但又不完全一样,果断下载下来研究研究,结果才发现其实这个效果并没有你想的那么难。
废话不多说,上代码:
main.xml:(其实就是两个控件的使用ImageSwitcher和Gallery)
<?xml version="1.0" encoding="utf-8"?> <!-- 相对布局 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- 单个图片显示 -->
<ImageSwitcher
android:id="@+id/switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
<!-- 显示图片列表控件 -->
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="30dip" >
</Gallery> </RelativeLayout>
创建一个新的JAVA文件galleryImage.java(并在清单文件中设置为默认):
public class galleryImage extends Activity {
private Gallery gallery;
ImageSwitcher imageSwitcher; // 声明ImageSwitcher对象,图片显示区域
public List<Map<String, Object>> list;
private int[] myImageIds = { R.drawable.i1, R.drawable.i2, R.drawable.i3,
R.drawable.i4 }; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Init(); } /**
* 初始化
*/
public void Init(){
// 通过控件的ID获得imageSwitcher的对象
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
// 设置自定义的图片显示工厂类
imageSwitcher.setFactory(new MyViewFactory(this)); Animation();
/*adapter = new SwitchereAdapter(this);
adapter.createReflectedImages(); // 创建倒影效果
gallery.setAdapter(adapter);*/
gallery = (Gallery) findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemSelectedListener(new OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// 通过求余数,循环显示图片 imageSwitcher.setImageResource(myImageIds[position
% myImageIds.length]);
} @Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub } });
} public void ChangeScale(){ } /**
* 动画效果
*/
public void Animation() {
// 设置ImageSwitcher组件显示图像的动画效果
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
} /**
* Gallery的图片适配器
* @author AF74776
*
*/
public class ImageAdapter extends BaseAdapter {
// 声明一个变量
int mGalleryItemBackGround;
private Context mContext; public ImageAdapter(Context c) {
mContext = c;
// 实用布局文件中的Gallery属性
TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
// 取得gallery属性饿index id
mGalleryItemBackGround = a.getResourceId(
R.styleable.Gallery_android_galleryItemBackground, 0);
// 让对象的styleable属性能反复实用
a.recycle();
} public int getCount() {// 返回数组长度
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
} public Object getItem(int position) {
return position;
} public long getItemId(int position) {// 得到图片ID
return position;
} public View getView(int position, View converView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
// i.setImageResource(myImageIds[position %myImageIds.length ]);
i.setImageResource(myImageIds[position % myImageIds.length]);
i.setAdjustViewBounds(true); // 图片自动调整显示
i.setScaleType(ImageView.ScaleType.FIT_XY);// 重新设置图片的宽高
i.setLayoutParams(new Gallery.LayoutParams(200, 200));// 设置layout的宽高
i.setBackgroundResource(mGalleryItemBackGround);// 设置背景
return i;// 返回对象
} } // 自定义图片显示工厂类,继承ViewFactory class MyViewFactory implements ViewFactory { private Context context; // 定义上下文 // 参数为上下文的构造方法 public MyViewFactory(Context context) { this.context = context; } // 显示图标区域 public View makeView() { ImageView iv = new ImageView(context); // 创建ImageView对象 iv.setScaleType(ImageView.ScaleType.FIT_CENTER); // 图片自动居中显示 // 设置图片的宽和高 iv.setLayoutParams(new ImageSwitcher.LayoutParams(
400, 400)); return iv; // 返回ImageView对象 }
}
}
代码中有详细的注释,我觉得我都能看懂(自认为自己比较笨),相信大家也一定能看懂。
Android ImageSwitcher和Gallery的使用的更多相关文章
- 【Android 界面效果30】Android中ImageSwitcher结合Gallery展示SD卡中的资源图片
本文主要是写关于ImageSwitcher结合Gallery组件如何展示SDCard中的资源图片,相信大家都看过API Demo 中也有关于这个例子的,但API Demo 中的例子是展示工程中Draw ...
- Android -- ImageSwitch和Gallery 混合使用
1. 实现效果
- android ImageSwitcher
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...
- Android学习笔记 Gallery图库组件的使用
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- Android学习之Gallery
在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最 ...
- 备忘-Android ViewPager 与Gallery滑动冲突解决方法
解决方法,重新定义gallery,禁止触发pager的触摸事件 1 public class UserGallery extends Gallery implements OnGestureListe ...
- Android源代码之Gallery专题研究(1)
前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了非常久总是无法下笔,认为没什么好写的.如今最终决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一 ...
- Android ImageSwitcher 配合Picasso解决内存溢出(OOM)问题
最近项目中用到了 ImageSwitcher 来实现图片切换,使用起来很简单,但发现当图片比较大(超过了3M)时,程序出现了内存溢出(OOM)问题而崩溃了. 原因就是图片太大了,显示到 ImageVi ...
- Android基础TOP6_2:Gallery +Image完成画廊
Activity: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
随机推荐
- SSL双向认证(高清版)
介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于n ...
- POJ 2240 Arbitrage spfa 判正环
d[i]代表从起点出发可以获得最多的钱数,松弛是d[v]=r*d[u],求最长路,看有没有正环 然后这题输入有毒,千万别用cin 因为是大输入,组数比较多,然后找字符串用strcmp就好,千万不要用m ...
- 关于Spring的Controller及Struts的Action的多线程的注意
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全 ...
- HDU1075 - What Are You Talking About(Trie树)
题目大意 给定一些火星文单词以及对应的英语单词,然后给你一些火星文,要求你翻译成对应的英文 题解 第一次写Trie树! 把所有火星文单词插入到Trie树中,并且每个火星文单词结尾的节点记录相应英文单词 ...
- 选择一个 HTTP 状态码不再是一件难事 – Racksburg
原文链接:http://racksburg.com/choosing-an-http-status-code/ 打开双语对照阅读 有什么能比 HTTP 响应状态码更简单呢?页面渲染了吗?好极了,返回 ...
- mysql group by 用法解析(详细)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- D3D游戏编程系列(三):自己动手编写即时战略游戏之寻路
说起即时战略游戏,不得不提的一个问题是如何把一个物体从一个位置移动到另一个位置,当然,我说的不是瞬移,而是一个移动的过程,那么在这个移动的过程中我们如何来规划路线呢,这就不得不提到寻路了. 我所了解到 ...
- [三]SpringMvc学习-封装、乱码问题、重定向、转发
1.对象属性自动封装 前台input 用对象的属性名,后台自动会封装为对象,类似struts 2.解决post乱码问题 在web.xml中配置过滤器 <filter> <filter ...
- Redis作者谈Redis应用场景
Redis作者谈Redis应用场景 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多 ...
- [Javascript] Fetch API
fetch() does the same thing as XHR, but fetch return a promise. fetch('password.txt', { 'method': 'P ...