您的位置:首页 > 产品设计 > UI/UE

AndroidGUI21:ImageSwitcher常用技巧

2011-06-13 17:14 393 查看
ImageSwitcher

ViewGroup
的派生类,
ViewGroup

View
的派生类。

ImageSwitcher
很简单见,但在使用它的时候,有一个地方必须要注意,否则就会出现
NullPointerException
。具体情况,请见下面的例子。

在这个例子中,我们将大致要重复做一遍
AndroidGUI19

Gallery
常用技巧中的提到的事情。也就是说,这次我们还要用到
Gallery
,不过这次不再用
ImageView
来显示大图了,而是改用
ImageSwitcher
来代替它。

1.

创建一个
Android
Project
,修改
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
,代码如下:

package
com.pat.gui;

import
android.content.Context;

import
android.graphics.Color;

import
android.view.View;

import
android.view.ViewGroup;

import
android.widget.BaseAdapter;

import
android.widget.Gallery;

import
android.widget.ImageView;

public
class 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, View
convertView, ViewGroup parent)

{

ImageView view;

view =
(ImageView)convertView;

if(view == null)

{

view = new
ImageView(ctx);

}

view.setImageResource(images[position]);

view.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

view.setLayoutParams(new
Gallery.LayoutParams(60, 60));

view.setBackgroundColor(Color.LTGRAY);

return view;

}

}

4.

实现
Activity
所对应的代码,使之如下
(
注意其中的粗体字部分
)


package
com.pat.gui;

import
android.app.Activity;

import
android.os.Bundle;

import
android.util.DisplayMetrics;

import
android.view.View;

import
android.view.Window;

import
android.view.WindowManager;

import
android.widget.AdapterView;

import
android.widget.Gallery;

import
android.widget.ImageSwitcher;

import
android.widget.ImageView;

import
android.widget.AdapterView.OnItemSelectedListener;

import
android.widget.FrameLayout.LayoutParams;

import
android.widget.ViewSwitcher.ViewFactory;

public
class ControlImageSwitcher extends Activity

implements

OnItemSelectedListener,
ViewFactory

{

private Gallery gallery;

private ImageSwitcher imageswitcher;

private ImageAdapter adapter;

private DisplayMetrics dm;

//@Override

public void onCreate(Bundle
savedInstanceState)

{

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 void
onItemSelected(AdapterView<?> parent, View view, int position, long id)

{

int imageID = (int)
adapter.getItemId(position);

imageswitcher.setImageResource(imageID);

}

//@Override

public void
onNothingSelected(AdapterView<?> parent)

{

imageswitcher.setImageResource((int)
adapter.getItemId(0));

}

//@Override

//
接口

ViewFactory

中规定必须实现的方法,返回的

View

就是

ImageSwitcher

用于显示图片的

vie

w

public View makeView()

{

ImageView iv = new
ImageView(this);

//
设置背景颜色

iv.setBackgroundColor(0xFF646464);

iv.setScaleType(ImageView.ScaleType.FIT_CENTER);

iv.setLayoutParams(new
ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, dm.heightPixels - 70));

//
上面语句中
-70
的目的是应为,
ImageSwitcher
下面要显示
Gallery
,我们在
ImageAdapter
中设定了

// view.setLayoutParams(new
Gallery.LayoutParams(60, 60));

//
即高度是
60pixels
,在加在
main.xml

Gallery
有下面这样的属性:

//
android:layout_marginTop="10px"

//
因此加起来一共刚好是
70px

return iv;

}

}

运行结果:



让下面的
Gallery
中的图片滚动,上面的
ImageSwitcher
会显示
Gallery
在屏幕上处于中间
(
水平方向
)
位置的那副图片:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: