android中Gallery与ImageSwicther解析

1.Gallery

Gallery控件一般是用于显示图像列表,因此也称为是画廊控件, Gallery只能水平显示一行,而且支持水平滑动效果。也就是说,单击、选中或者拖动Gallery中的图像, Gallery图像中的列表会根据不同的情况向左向右移动,直到显示到最后的一个图像为止。

2.ImageSwicther

    ImageSwitcher控件可以用在不同的图像之间切换,其中切换的过程可以采用动画的方法,如淡入淡出的效果。

ImageSwitcher需要一个图像工厂(ViewFactory)来创建用于显示图像的ImageView对象,因此我们需要一个实现android.widget.ViewSwitcher.ViewFactory接口的类。

使用ImageSwitcher时,基本步骤:

  1.必须implements ViewSwitcher.ViewFactory

   2.调用setFactory方法:imageSwitcher.setFactory(this)

   3.重写函数 makeView(),做如下处理:(此方法在进入该Activity时就会调用)

 

  4.在需要显示图片的地方写如下代码

以下具体列子如下:

在main.xml文件中:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3    android:layout_height="fill_parent"
 4    android:layout_width="fill_parent">
 5     <ImageSwitcher
 6         android:id="@+id/imageswitcher"
 7         android:layout_width="fill_parent"
 8         android:layout_height="fill_parent">
 9     </ImageSwitcher>
10     <Gallery
11         android:id="@+id/gallery"
12         android:layout_width="fill_parent"
13         android:layout_height="wrap_content"
14         android:layout_alignParentBottom="true"/>
15 </RelativeLayout>

在java文件中:

 1 public class MainActivity extends Activity implements ViewFactory,OnItemSelectedListener{
 2
 3 private Gallery gallery;
 4 private ImageSwitcher is;
 5 private int galleryItemBackGroundId;
 6 private int imageId[]={R.drawable.gril1,R.drawable.gril2,R.drawable.gril3,R.drawable.gril4,R.drawable.gril5,
 7           R.drawable.gril6,R.drawable.gril7,R.drawable.gril8,R.drawable.gril9,R.drawable.gril10,
 8           R.drawable.gril11};
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         requestWindowFeature(Window.FEATURE_NO_TITLE);  //去除标题
13         setContentView(R.layout.main);
14
15         gallery = (Gallery) findViewById(R.id.gallery);
16         gallery.setAdapter(new MyGalleryAdapter(MainActivity.this));
17         gallery.setOnItemSelectedListener(this);  //设置选项监听用setOnItemSelectedListener
18
19         is = (ImageSwitcher) findViewById(R.id.imageswitcher);
20         is.setFactory(this);
21    22         is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
23         is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
24
25     }
26
27     @Override
28     public boolean onCreateOptionsMenu(Menu menu) {
29         // Inflate the menu; this adds items to the action bar if it is present.
30         getMenuInflater().inflate(R.menu.main, menu);
31         return true;
32     }
33
34     class MyGalleryAdapter extends BaseAdapter{
35
36         private Context context;
37
38         public MyGalleryAdapter(Context context) {
39             this.context = context;
40             TypedArray typed = obtainStyledAttributes(R.styleable.Gallery);   //获得属性集合
41             galleryItemBackGroundId = typed.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
42         }
43
44         @Override
45         public int getCount() {
46             // TODO 自动生成的方法存根
47             return Integer.MAX_VALUE;  //为了实现画廊中图片循环效果,才设置return_Integer.Max_VALUE,其实可以return imageId.length;
48         }
49
50         @Override
51         public Object getItem(int position) {
52             // TODO 自动生成的方法存根
53             return imageId[position];
54         }
55
56         @Override
57         public long getItemId(int position) {
58             // TODO 自动生成的方法存根
59             return position;
60         }
61
62         @Override
63         public View getView(int position, View convertView, ViewGroup parent) {
64             // TODO 自动生成的方法存根
65             ImageView imageView = new ImageView(context);
66             imageView.setImageResource(imageId[position%imageId.length]);  设置图片到view中
67             imageView.setScaleType(ScaleType.FIT_XY);
68             imageView.setLayoutParams(new Gallery.LayoutParams(156, 100));
69             imageView.setBackgroundResource(galleryItemBackGroundId);  //设置imageview 背景
70             return imageView;
71         }
72
73     }
74
75     @Override
76     public View makeView() {
77         ImageView imageView  = new ImageView(MainActivity.this);
78         imageView.setAdjustViewBounds(true);   //是否保持宽高比。需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果
79         imageView.setScaleType(ScaleType.FIT_XY);
80         imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
81
82         return imageView;
83     }
84
85     @Override
86     public void onItemSelected(AdapterView<?> parent, View view, int position,      //画廊(Gallery)选中的项
87             long id) {
88         // TODO 自动生成的方法存根
89
90         is.setImageDrawable(getResources().getDrawable(imageId[position%imageId.length]));
91     }
92
93     @Override
94     public void onNothingSelected(AdapterView<?> parent) {
95         // TODO 自动生成的方法存根
96
97     }
98 }

运行效果:

时间: 2024-10-01 03:00:45

android中Gallery与ImageSwicther解析的相关文章

Android中Gallery和ImageSwitcher同步自动(滚动)播放图片库

本文主要内容是如何让Gallery和ImageSwitcher控件能够同步自动播放图片集 ,看起来较难,然而,实现的方法非常简单, 请跟我慢慢来.总的来说,本文要实现的效果如下图:(截图效果不怎么好) 本文是建立在以下两篇bolg上的:      1.Android入门第十二篇之Gallery                  2.Android 控件之ImageSwitcher图片切换器 如果对Gallery和ImageSwitcher控件不是很熟悉的同学,建议先过去看看,本文并没有怎么讲述控

android中使用JSOUP如何解析网页数据详述

最近使用了Jsoup,感觉还是挺简单,挺方便的,轻而易举地抓取网页源码,分析获取各个标签所需的东西. 这几天在搞一个音乐播放器的小项目,其中使用到了就是使用JSOUP进行页面数据的获取,获取网页的歌曲列表,并对歌曲的链接进行加载,以便实现歌曲下载和歌词的下载.搞好之后,就会跟着写几篇博文,分享给大家.本博文主要说明android中使用jsoup如何进行网页数据的获取. 具体可看下面各个相关例子: Jsoup下载地址: http://jsoup.org/download jsoup开发指南,jso

Android中复用问题哲理性解析

Android中列表的复用机制提高了APP的运行效率,但随之而来的复用的问题总是让程序员们头痛,一个 bug找头天也找不到.我就把自己解决这方面的经验贡献出来供大家参考: 问题1:什么是复用 复用其实指的是复用View,而绑定View的数据是变化的. 问题2:复用出现的场景 在Adapter中,如果绑定View的数据的时候如果有if判断,往往很多人忘记了加else,这是大多数复用问题出现的根源. 实际场景:     比如每个item可能有或没有图片picarrList,之前我只加了if判断,如果

android中SurfaceView组件使用解析

SurfaceView组件可以实现高效率的绘制二维图或者显示图像,在游戏开发中经常用到.在android中,已经提供了SurfaceView组件.使用时,一般是通过继承的方法实现自定义surfaceView,也可以在MainActivity中通过接口surfaceHolder.callback接口实现,这里介绍通过接口实现surfaceView绘图,当然,绘图可以是静态图(在指定区域只绘制一次),也可以是动态图(指定区域-->绘制-->再循环). SurfaceView组件的使用流程:通过fi

Android中Gallery和ImageSwitcher的使用

效果如下: 布局文件activity_main.xml如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match

Android中通过SAX方式解析XML

每个访问网络的应用程序都有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据.那么,这些数据是用什么格式在网络上传输的呢?一般,我们会在网络上传输一些格式化的数据,这些数据有一定的结构和语义.另一方收到数据消息后就可以按照相同的结构规格来进行解析,从而获取到想要的那部分内容. 网络上传输数据最常用的格式有两种,XML和JSON.下面,我们介绍通过SAX方式来解析XML. 首先,进行准备一段XML格式的数据. get_data.xml 1 <apps> 2 <app>

Android之旅十四 android中的xml文件解析

在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件:person.xml <? xml version="1.0" encoding="UTF-8"? > <persons> <person id="001"> <name>zhangsan</na

Android中使用PULL方式解析XML文件

Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理.当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件.先看下如下工程的目录结构: 按以下步骤进行操作: [1]

android中xml的pull解析

xml的pull解析:    //类加载器加载xml文件 InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("weather.xml"); //生成xml的pull解析器 XmlPullParser pull = Xml.newPullParser(); try { //设置输入流 pull.setInput(is, "utf-8"); //解析器当前处于的状态 int