Android -- (10),Gallery ImageView
来源:互联网 发布:淘宝3d打印价格 编辑:程序博客网 时间:2024/04/29 03:25
时间:2013/1/15
这篇文章介绍几个显示image的view。这个得截图,不能懒了。
一 ,Gallery and ImageView Views
1.Gallery View
--gallery是一种可以水平滚动来展示图片的控件。(center-locked, horizontal scrolling list)
(1)第一个还是介绍gallery的xml声明:
<Galleryandroid:id=”@+id/gallery1”android:layout_width=”fill_parent”android:layout_height=”wrap_content” />再在res/value里面新建一个名为attr的xml文件,内容是:
<?xml version="1.0" encoding="utf-8"?><resources><declare-styleable name="Gallery1"><attr name="android:galleryItemBackground" /></declare-styleable></resources>
(2)在例子里面,我们把几张图片放进了项目的res/drawable-mdpi文件夹里面。
(3)然后在主活动里面定义一个数组,里面的是这些图片的路径:
//---the images to display---Integer[] imageIDs = {R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,R.drawable.pic6,R.drawable.pic7};
(4)然后在主活动里面创建一个叫做ImageAdapter的类,继承baseAdapter,用这里类把我们的图片和控件gallery绑定起来。BaseAdapter这个类就充当了AdapterView(这里是gallery)和所需要绑定的数据之间的桥梁,还有其他AdapterView 例如:ListView,GridView,Spinner,Gallery。
在这里类里面,我们要实现如下方法:
public class ImageAdapter extends BaseAdapter {public ImageAdapter(Context c) { ... }//---returns the number of images---public int getCount() { ... }//---returns the item---public Object getItem(int position) { ... }//---returns the ID of an item---public long getItemId(int position) { ... }//---returns an ImageView view---public View getView(int position, View convertView,ViewGroup parent) { ... }}这里实现如下:
public class ImageAdapter extends BaseAdapter { Context context; int itemBackground; public ImageAdapter(Context c) { context=c; TypedArray a=obtainStyledAttributes(R.styleable.Gallery1); itemBackground=a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); a.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; if(convertView == null) { imageView=new ImageView(context); imageView.setImageResource(imageIDs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(150,120)); } else { imageView=(ImageView)convertView; } imageView.setBackgroundResource(itemBackground); return imageView; } }
额,这里我们把这个类和对应的gallery结合起来:
用setAdapter方法:
gallery.setAdapter((new ImageAdapter(this)));
我们再在主活动的xml文件里面加入一个ImageView:
<ImageViewandroid:id=”@+id/image1”android:layout_width=”320dp”android:layout_height=”250dp”android:scaleType=”fitXY” />
然后当我们选择了gallery里面的某个picture的时候,就可以用imageView将大图显示出来,于是我们设置了gallery的OnItemClickListener:
gallery.setOnItemClickListener(new OnItemClickListener(){public void onItemClick(AdapterView<?> parent, View v,int position, long id){Toast.makeText(getBaseContext(),“pic” + (position + 1) + “ selected”,Toast.LENGTH_SHORT).show();//---display the images selected---ImageView imageView =(ImageView) findViewById(R.id.image1);imageView.setImageResource(imageIDs[position]);}});
效果如下图所示:
二,ImageSwitcher
--一种比ImageView更炫酷的展示图片的控件,这里我们也和gallery一起使用。
(1)也是先将gallery和ImageSwitcher声明在主活动里面:
<Galleryandroid:id=”@+id/gallery1”android:layout_width=”fill_parent”android:layout_height=”wrap_content” /><ImageSwitcherandroid:id=”@+id/switcher1”android:layout_width=”fill_parent”android:layout_height=”fill_parent”android:layout_alignParentLeft=”true”android:layout_alignParentRight=”true”android:layout_alignParentBottom=”true” />
(2)同样在res/value中设置好attr.xml:
<?xml version=”1.0” encoding=”utf-8”?><resources><declare-styleable name=”Gallery1”><attr name=”android:galleryItemBackground” /></declare-styleable></resources>
(3)同样,在主活动创建一个ImageAdapter类,继承BaseAdapter类:
public class ImageAdapter extends BaseAdapter{private Context context;private int itemBackground;public ImageAdapter(Context c){context = c;//---setting the style---TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);itemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);a.recycle();}//---returns the number of images---public int getCount(){return imageIDs.length;}//---returns the item---public Object getItem(int position){return position;}//---returns the ID of an item---public long getItemId(int position){return position;}//---returns an ImageView view---public View getView(int position, View convertView, ViewGroup parent){ImageView imageView = new ImageView(context);imageView.setImageResource(imageIDs[position]);imageView.setScaleType(ImageView.ScaleType.FIT_XY);imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));imageView.setBackgroundResource(itemBackground);return imageView;}}
同样,这个ImageAdapter也是将图片和gallery连接起来的。
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher1);imageSwitcher.setFactory(this);imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));Gallery gallery = (Gallery) findViewById(R.id.gallery1);gallery.setAdapter(new ImageAdapter(this));gallery.setOnItemClickListener(new OnItemClickListener(){public void onItemClick(AdapterView<?> parent,View v, int position, long id){imageSwitcher.setImageResource(imageIDs[position]);}});}其中ImageSwitcher的setInAnimation和setOutAnimation是设置动画的方法,而onItemClickListener设置了当gallery中某个图片被选中的时候,用ImageSwitcher的setResources方法来设置ImageSwitcher中的图片。
(5)因为实现了ViewFactory接口,所以要实现makeView方法(在主活动中):
public View makeView(){ImageView imageView = new ImageView(this);imageView.setBackgroundColor(0xFF000000);imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);imageView.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));return imageView;}
这方法创建了加入到ImageSwitcher中的控件,在这里我们用的是ImageView。然后在用ImageSwitcher的setfactory方法将主活动类(实现了viewfactory接口)设置成ImageSwitcher的viewfactory。
三,GridView
---GridView创建一个二维的滚动grid,可以用GridView和ImageView来二维展示图片.如下:
(1)GridView的声明如下:
<GridView android:layout_width="fill_parent" android:id="@+id/gridView" android:layout_height="fill_parent" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:columnWidth="90dp" android:stretchMode="columnWidth" android:gravity="center" />
(2)整个主活动的代码跟上面的差异不大,先贴出来:
package com.example.grid;import android.os.Bundle;import android.content.Context;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity {Integer[] imageIDs = {R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,R.drawable.pic6,R.drawable.pic7}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gridView=(GridView)findViewById(R.id.gridView); gridView.setAdapter(new ImageAdapter(this)); gridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent,View v,int position,long id) { Toast.makeText(getBaseContext(), "selected "+(position+1), Toast.LENGTH_SHORT).show(); } }); } public class ImageAdapter extends BaseAdapter { private Context context; public ImageAdapter(Context c) { context=c; } public Object getItem(int position) { return position; } public int getCount() { return imageIDs.length; } public Object getCount(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position,View convertView,ViewGroup parent) { ImageView imageView; if(convertView==null) { imageView=new ImageView(context); imageView.setLayoutParams(new GridView.LayoutParams(85,85) ); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setPadding(5, 5, 5, 5); } else imageView=(ImageView)convertView; imageView.setImageResource(imageIDs[position]); return imageView; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}
也是先将几幅图片放在res/drawable-mdpi处,然后用一个数组将他们的id集合起来,然后findViewById,再setAdapter。然后GridView控件再用Adapter中getView返回一个GridView处理的对象(这里是GridView)。然后在屏幕上展示出来。注意其中的getView方法指定了图片的大小,然后用setpadding来指定每个图片在GridView中的排布。
- Android -- (10),Gallery ImageView
- android基础入门Gallery与ImageView视图(10)
- android Gallery与ImageView的结合使用
- 【Android 开发教程】Gallery和ImageView
- android之ImageView+Gallery组件的应用
- 用户界面(三)ImageView、ImageButton、Gallery
- Android开源项目分类汇总(三) ViewPager 、Gallery、GridView、ImageView、ProgressBar
- 03 Android Gallery 和 ImageView 的组合使用
- android Gallery与imageView 滑动冲突问题解决方法
- Gallery和ImageView使用
- Gallery+ImageView实现图片浏览
- ImageView和Gallery的使用
- Android---Gallery
- Android Gallery
- Android - Gallery
- android Gallery
- Android Gallery
- Android Gallery
- android界面之ScrollView嵌套ListView冲突问题
- 使程序在Linux下后台运行
- 初试nose
- 深入理解成员函数的重载、隐藏、覆盖规则
- dinic
- Android -- (10),Gallery ImageView
- platform device
- IOS 显示和隐藏tabbar
- [转]我的AVR故事:linux下开发AVR
- hdu4278
- 阿根廷对中国油浸式三相变压器开启反倾销调查
- 初尝Linux下的AVR单片机开发
- 电路中有关选择MOS管的步骤
- Protothread机制文档(contiki-2.6\doc\pt-doc.txt)