展会信息港展会大全

android常用效果 拖动效果(Gallery) 切换图片(ImageSwitcher)
来源:互联网   发布日期:2015-10-03 10:46:46   浏览:1849次  

导读:常用的效果一、 拖动效果(Gallery)拖动效果是现在智能手机的一个不可缺少的功能,Android平台中实现拖动效果,主要是使用了Gallery控件,Gallery英文是画廊的意 思,顾名思义存放这显示的图片,存放图片资源......

常用的效果

一、拖动效果(Gallery)

拖动效果是现在智能手机的一个不可缺少的功能,Android平台中实现拖动效果,主要是使用了Gallery控件,Gallery英文是画廊的意 思,顾名思义存放这显示的图片,存放图片资源容器是继承自BaseAdapter类的派生类。当然我们也可以通过 setOnItemClickListener监听其事件。

【注意】Gallery 组件一般用于显示图像列表,因此也可称相册组件 Gallery 与GridView 的区别是Gallery只能水平显示一行,而且支持水平滑动效果。也就是说,单击、选中或拖动Gallery 中的图像,Gallery中的图像列表会根据不同的情况向左或右移动,直到显示最后一个图像为止.

实例分析:基于上述介绍,把要显示的图片资源索引存在一个int类型数组中,并且要显示哪个图片,通过setImageResource方法来设置ImageView要显示的图片。

关键源码:

main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>

<Gallery

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/Gallery01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

注意,以下ImageAdapter类继承自BaseAdapter,并重写其方法

public class ImageAdapter extends BaseAdapter {

private ContextmContext;// 定义Context

// 定义整型数组 即图片源

private Integer[] mImageIds = {

R.drawable.img1,

R.drawable.img2,

R.drawable.img3,

R.drawable.img4,

R.drawable.img5,

R.drawable.img6,

R.drawable.img7,

R.drawable.img8,

};

public ImageAdapter(Context c) {

this.mContext = c;

}

//获取图片个数

public int getCount() {

return mImageIds.length;

}

//获取图片在图库的位置

public Object getItem(int position) {

return position;

}

// 获取图片ID

public long getItemId(int position) {

return position;

}

public View getView(int position, View convertView, ViewGroup parent{

ImageView imageview = new ImageView(mContext);

//给ImageView设置资源

imageview.setImageResource(mImageIds[position]);

//设置布局图片120x120显示

imageview.setLayoutParams(new Gallery.LayoutParams(120,120));

//设置显示比例类型

imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);

return imageview;

}

}

而实际Activity01中只要把adapter付给Gallery对象,并设置监听事件即可

//获得Gallery对象

Gallery g = (Gallery) this.findViewById(R.id.Gallery01);

//添加ImageAdapter给Gallery对象

g.setAdapter(new ImageAdapter(this));

//设置Gallery对象的监听事件

g.setOnItemClickListener(new OnItemClickListener(){

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

Toast.makeText(Examples_04_17Activity.this,"你选择了"+(arg2+1)+" 号图片", Toast.LENGTH_SHORT).show();}

});

实例效果:

二、切换图片(ImageSwitcher)

该功能类似于很多图片浏览器,上一张下一张图片进行切换,ImageSwitcher在实现该效果时,需要设置一个ViewSwitcher.ViewFactory,注意ViewSwitcher.ViewFactory是个接口,目的:在视图转换器(ViewSwitcher)中创建视图。并通过makeView()方法来显示图片。

公共方法:public abstract View makeView ()

创建一个用于添加到视图转换器(ViewSwitcher)中的新视图

关键源码:

private ImageSwitcher m_Switcher; //创建ImageSwitcher对象

private static int index = 0; //索引

private static final int BUTTON_DOWN_ID = 0x123456; // 下一页 按钮ID

private static final int BUTTON_UP_ID = 0x123457; // 上一页 按钮ID

private static final int SWITCHER_ID = 0x123458; //ImageSwitcher对象的ID

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LinearLayout main_view = new LinearLayout(this);

m_Switcher = new ImageSwitcher(this); //创建ImageSwitcher对象

main_view.addView(m_Switcher); //在线性布局中添加ImageSwitcher视图

m_Switcher.setId(SWITCHER_ID); //设置ImageSwitcher对象的ID

m_Switcher.setFactory(this); //设置ImageSwitcher对象的数据源

m_Switcher.setImageResource(imagelist[index]);

setContentView(main_view); //设置显示上面创建的线性布局

Button next = new Button(this); //创建 下一张 按钮

next.setId(BUTTON_DOWN_ID);

next.setText("下一张");

next.setOnClickListener(this);

LinearLayout.LayoutParams param = newLinearLayout.LayoutParams(100, 100);

main_view.addView(next, param);

Button pre = new Button(this); //创建 上一张 按钮

pre.setId(BUTTON_UP_ID);

pre.setText("上一张");

pre.setOnClickListener(this);

main_view.addView(pre, param);

}

//事件监听、处理

public void onClick(View v) {

switch(v.getId()){

case BUTTON_DOWN_ID: //下一页

index++;

if (index >= imagelist.length){

index = 0;

}

//ImageSwitcher对象资源索引

m_Switcher.setImageResource(imagelist[index]);

break;

case BUTTON_UP_ID: //上一页

index--;

if (index < 0){

index = imagelist.length - 1;

}

//ImageSwitcher对象资源索引

m_Switcher.setImageResource(imagelist[index]);

break;

default:

break;

}

}

@Override

public View makeView() {

return new ImageView(this); //将所有图片通过ImageView来显示

}

【扩展点】ViewSwitcher

一、结构

public class ViewSwitcher extends ViewAnimator

Java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewSwitcher

已知直接子类:ImageSwitcher, TextSwitcher

二、概述

在两个视图间转换时显示动画,有一个可以创建这些视图的工厂类。你可以用工厂来创建这些视图,也可以自己创建。一个ViewSwitcher只允许包含两个子视图,且一次仅能显示一个。

(译者注:与ViewFlipper类相似,但该类不常用,常用其两个子类ImageSwitcher:转换图片时增加动画效果; TextSwitcher: 转换文字时增加动画效果; 其实例见apidemos中ImageSwitcher实例和TextSwitcher实例)

三、内部类

interfaceViewSwitcher.ViewFactory

在一个ViewSwitcher里创建视图

.

五、公共方法

public void setFactory (ViewSwitcher.ViewFactory factory)

设置用来生成将在视图转换器中切换的两个视图的工厂。也可以调用两次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)来替代使用工厂的方法。

参数: factory用来生成转换器内容的视图工厂

实例效果:

三、网格视图(GridVIew)

网格视图的排列方式与矩阵类似,它所需要显示元素同样适用BaseAdapter来实现,适用方法,类似于Gallery控件

关键代码:

//取得GridView对象

GridView gridview = (GridView) this.findViewById(R.id.gridview);

//添加元素给gridview

gridview.setAdapter(new ImageAdapter(this));

gridview.setBackgroundResource(R.drawable.bg0);

//事件监听

gridview.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View v, int position, long id){

Toast.makeText(Activity01.this, "你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT).show();

}

});

四、卷轴视图(ScrollView)

卷轴视图主要用于,一页数据显示不开后,需要滚动来显示的视图。

实例分析:ScrollView定义个线性布局,线性布局中一个TextView以及一个Button,每点击一次按钮就增加一个线性布局。

关键源码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/ScrollView01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:scrollbars="none" >

......

</ScrollView>

在按钮点击事件里:

......

//改变默认焦点切换

buttonView.setOnKeyListener(mNewButtonKeyListener);

//投递一个消息进行滚动

mHandler.post(mScrollToBottom);

private Runnable mScrollToBottom = new Runnable() {

@Override

public void run(){

int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();

if (off > 0) {

mScrollView.scrollTo(0, off);//设置当前视图滚动到的位置

}

}

};

赞助本站

人工智能实验室
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港