AndroidGUI21:ImageSwitcher常用技巧
来源:互联网 发布:qq飞车战车数据 编辑:程序博客网 时间:2024/04/30 02:17
ImageSwitcher是ViewGroup的派生类,ViewGroup是View的派生类。
ImageSwitcher很简单见,但在使用它的时候,有一个地方必须要注意,否则就会出现NullPointerException。具体情况,请见下面的例子。
在这个例子中,我们将大致要重复做一遍AndroidGUI19:Gallery常用技巧中的提到的事情。也就是说,这次我们还要用到Gallery,不过这次不再用ImageView来显示大图了,而是改用ImageSwitcher来代替它。
1. 创建一个AndroidProject,修改main.xml使之如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageSwitcher
android:id="@+id/imageswitcher"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:spacing="10px"
android:layout_marginTop="10px"
android:layout_alignParentBottom="true"
/>
<!--
android:layout_alignParentBottom="true"
就是让Gallery位于屏幕底端,LinearLayout不存在这个属性
-->
</RelativeLayout>
2. 把项目需要用到的图片文件拖入res/drawable-mdpi文件夹下,如下图所示
3. 实现一个自定义的Adapter:ImageAdapter,代码如下:
packagecom.pat.gui;
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.Gallery;
importandroid.widget.ImageView;
publicclass ImageAdapter extends BaseAdapter
{
private Context ctx;
private int images[] =
{
R.drawable.lrt01,
R.drawable.lrt02,
R.drawable.lrt03,
R.drawable.lrt04,
R.drawable.lrt05,
R.drawable.lrt06,
R.drawable.lrt07,
R.drawable.lrt08,
R.drawable.lrt09
};
public ImageAdapter(Context ctx)
{
this.ctx = ctx;
}
//@Override
public int getCount()
{
return images.length;
}
//@Override
public Object getItem(int position)
{
return images[position];
}
//@Override
public long getItemId(int position)
{
return images[position];
}
//@Override
public View getView(int position, ViewconvertView, ViewGroup parent)
{
ImageView view;
view =(ImageView)convertView;
if(view == null)
{
view = newImageView(ctx);
}
view.setImageResource(images[position]);
view.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
view.setLayoutParams(newGallery.LayoutParams(60, 60));
view.setBackgroundColor(Color.LTGRAY);
return view;
}
}
4. 实现Activity所对应的代码,使之如下(注意其中的粗体字部分):
packagecom.pat.gui;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.DisplayMetrics;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.AdapterView;
importandroid.widget.Gallery;
importandroid.widget.ImageSwitcher;
importandroid.widget.ImageView;
importandroid.widget.AdapterView.OnItemSelectedListener;
importandroid.widget.FrameLayout.LayoutParams;
importandroid.widget.ViewSwitcher.ViewFactory;
publicclass ControlImageSwitcher extends Activity
implements
OnItemSelectedListener,ViewFactory
{
private Gallery gallery;
private ImageSwitcher imageswitcher;
private ImageAdapter adapter;
private DisplayMetrics dm;
//@Override
public void onCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题
int flag =WindowManager.LayoutParams.FLAG_FULLSCREEN; //全屏
this.getWindow().setFlags(flag, flag);
setContentView(R.layout.main);
// 得到屏幕尺寸
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
gallery =(Gallery)this.findViewById(R.id.gallery);
imageswitcher =(ImageSwitcher)this.findViewById(R.id.imageswitcher);
//下面这句必须要,不然会使setImageSource这个方法指向空指针
imageswitcher.setFactory(this);
adapter = new ImageAdapter(this);
gallery.setAdapter(adapter);
gallery.setOnItemSelectedListener(this);
}
//@Override
public voidonItemSelected(AdapterView<?> parent, View view, int position, long id)
{
int imageID = (int)adapter.getItemId(position);
imageswitcher.setImageResource(imageID);
}
//@Override
public voidonNothingSelected(AdapterView<?> parent)
{
imageswitcher.setImageResource((int)adapter.getItemId(0));
}
//@Override
// 接口ViewFactory中规定必须实现的方法,返回的View就是ImageSwitcher用于显示图片的view
public View makeView()
{
ImageView iv = newImageView(this);
//设置背景颜色
iv.setBackgroundColor(0xFF646464);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, dm.heightPixels - 70));
// 上面语句中-70的目的是应为,ImageSwitcher下面要显示Gallery,我们在ImageAdapter中设定了
// view.setLayoutParams(newGallery.LayoutParams(60, 60));
// 即高度是60pixels,在加在main.xml中Gallery有下面这样的属性:
//android:layout_marginTop="10px"
// 因此加起来一共刚好是70px
return iv;
}
}
运行结果:
让下面的Gallery中的图片滚动,上面的ImageSwitcher会显示Gallery在屏幕上处于中间(水平方向)位置的那副图片:
- AndroidGUI21:ImageSwitcher常用技巧
- Android开发:ImageSwitcher常用技巧
- ImageSwitcher
- ImageSwitcher
- ImageSwitcher
- ImageSwitcher
- ImageSwitcher
- 文章标题:Android常用控件ImageSwitcher的使用方法
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- MySQL攻击部分代码
- 利用ArcGIS开发地理信息系统入门
- 用 awk命令 来保存记录CPU占有率
- IMF总裁之争白热化 法财长、墨央行行长忙拉票
- 内存整理的原理是什么?
- AndroidGUI21:ImageSwitcher常用技巧
- 002. EsayUI系列之easyui-menu
- 聚焦“钱流” 热钱流向古典家具
- webservice 笔记(小结) axis2 集成spring 发布服务
- IsPostBack深入探讨
- dlopen dlsym dlclose dlerror【zz】
- C# string.Compare()方法
- [摘抄] 我在北京工作这几年──个软件工程师的反省
- makefile__PHONY 目标