下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么利用Gallery实现幻灯片效果
今天就跟大家聊聊有关Android中怎么利用Gallery实现幻灯片效果,可能很多人都不太了解,为了让大家更加了解,在下给大家总结了以下内容,希望大家根据这篇文章可以有所收获。(1)幻灯片效果的实现:自定义Gallery:DetailGallery.java可视界面:ImgSwitchActivity.java适配类:GalleryIndexAdapter.java1)自定义Gallery主要重写onFling通过按下和松手的位置不同比较是向右移动还是向左移动,部分代码如下:private
boolean
isScrollingLeft(MotionEvent
e1,
MotionEvent
e2)
{
return
e2.getX()
>
e1.getX();
}
@Override
public
boolean
onFling(MotionEvent
e1,
MotionEvent
e2,
float
velocityX,
float
velocityY)
{
int
kEvent;
if
(isScrollingLeft(e1,
e2))
{
kEvent
=
KeyEvent.KEYCODE_DPAD_LEFT;
}
else
{
kEvent
=
KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent,
null);
return
true;
}2)在适配类
GalleryIndexAdapter主要完成幻灯片的循环播放,在getCount里面返回值返回Integer.MAX_VALUE,然后在getView里面根据position与传进来初始图片个数进行余数计算得到每次循环到哪张图片。部分代码如下:@Override
public
int
getCount()
{
//
TODO
Auto-generated
method
stub
return
Integer.MAX_VALUE;
}
……
@Override
public
View
getView(int
position,
View
convertView,
ViewGroup
arg2)
{
//
TODO
Auto-generated
method
stub
ImageView
imageView
=
new
ImageView(context);
imageView.setBackgroundResource(imagList.get(position%imagList.size()));
imageView.setScaleType(ScaleType.FIT_XY);
imageView.setLayoutParams(new
Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT
,
Gallery.LayoutParams.WRAP_CONTENT));
return
imageView;
}3)在可视界面里面实现逻辑控制,通过定时器定时刷新幻灯片,定时器通过定时发送消息,消息接受处理机制接收到消息之后,就模拟滑动事件,调用Gallery的onFling方法实现图片自动切换效果。选择按钮的显示效果(RadioButton)需要在Gallery的setOnItemSelectedListener进行处理。//定时器和事件处理5秒刷新一次幻灯片
/**
展示图控制器,实现展示图切换
*/
final
Handler
handler_gallery
=
new
Handler()
{
public
void
handleMessage(Message
msg)
{
/*
自定义屏幕按下的动作
*/
MotionEvent
e1
=
MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_UP,
89.333336f,
265.33334f,
0);
/*
自定义屏幕放开的动作
*/
MotionEvent
e2
=
MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN,
300.0f,
238.00003f,
0);
myGallery.onFling(e2,
e1,
-800,
0);
/*
给gallery添加按下和放开的动作,实现自动滑动
*/
super.handleMessage(msg);
}
};
protected
void
onResume()
{
autogallery();
super.onResume();
};
private
void
autogallery()
{
/*
设置定时器,每5秒自动切换展示图
*/
Timer
time
=
new
Timer();
TimerTask
task
=
new
TimerTask()
{
@Override
public
void
run()
{
Message
m
=
new
Message();
handler_gallery.sendMessage(m);
}
};
time.schedule(task,
8000,
5000);
}
//指示按钮和gallery初始化过程以及事件监听添加过程
//初始化
void
init(){
myGallery
=
(DetailGallery)findViewById(R.id.myGallery);
gallery_points
=
(RadioGroup)
this.findViewById(R.id.galleryRaidoGroup);
ArrayList<Integer>
list
=
new
ArrayList<Integer>();
list.add(R.drawable.banner1);
list.add(R.drawable.banner2);
list.add(R.drawable.banner3);
list.add(R.drawable.banner4);
GalleryIndexAdapter
adapter
=
new
GalleryIndexAdapter(list,
context);
myGallery.setAdapter(adapter);
//设置小按钮
gallery_point
=
new
RadioButton[list.size()];
for
(int
i
=
0;
i
<
gallery_point.length;
i++)
{
layout
=
(LinearLayout)
inflater.inflate(R.layout.gallery_icon,
null);
gallery_point[i]
=
(RadioButton)
layout.findViewById(R.id.gallery_radiobutton);
gallery_point[i].setId(i);/*
设置指示图按钮ID
*/
int
wh
=
Tool.dp2px(context,
10);
RadioGroup.LayoutParams
layoutParams
=
new
RadioGroup.LayoutParams(wh,
wh);
//
设置指示图大小
gallery_point[i].setLayoutParams(layoutParams);
layoutParams.setMargins(4,
0,
4,
0);//
设置指示图margin值
gallery_point[i].setClickable(false);/*
设置指示图按钮不能点击
*/
layout.removeView(gallery_point[i]);//一个子视图不能指定了多个父视图
gallery_points.addView(gallery_point[i]);/*
把已经初始化的指示图动态添加到指示图的RadioGroup中
*/
}
}
//添加事件
void
addEvn(){
myGallery.setOnItemSelectedListener(new
OnItemSelectedListener()
{
@Override
public
void
onItemSelected(AdapterView<?>
arg0,
View
arg1,
int
arg2,
long
arg3)
{
//
TODO
Auto-generated
method
stub
gallery_points.check(gallery_point[arg2%gallery_point.length].getId());
}
@Override
public
void
onNothingSelected(AdapterView<?>
arg0)
{
//
TODO
Auto-generated
method
stub
}
});
}(2)商品图片滑动实现过程:图片滑动效果和上面的幻灯片效果非常的类似,只是在逻辑处理和界面上有一些小小的区别。1)适配器类GalleryAdapter.java上面进行了图片缩放处理,节省了内存开销,又可把图片按照自己的要求缩放。//由于是测试case,所以图片都是写死的为了区别,在position
=
1的时候换了一张图片
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
//
TODO
Auto-generated
method
stub
ImageView
imageView
=
(ImageView)
LayoutInflater.from(context).inflate(R.layout.img,
null);
Bitmap
bitmap
=
null;
try
{
if(position
==
1
){
bitmap
=
BitmapFactory.decodeStream(assetManager.open("xpic11247_s.jpg"));
imageView.setTag("xpic11247_s.jpg");
}
else{
bitmap
=
BitmapFactory.decodeStream(assetManager.open("item0_pic.jpg"));
imageView.setTag("item0_pic.jpg");
}
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
//
加载图片之前进行缩放
int
width
=
bitmap.getWidth();
int
height
=
bitmap.getHeight();
float
newHeight
=
200;
float
newWidth
=
width*newHeight/height;
float
scaleWidth
=
((float)
newWidth)
/
width;
float
scaleHeight
=
((float)
newHeight)
/
height;
//
取得想要缩放的matrix参数
Matrix
matrix
=
new
Matrix();
matrix.postScale(scaleWidth,
scaleHeight);
//
得到新的图片
Bitmap
newbm
=
Bitmap.createBitmap(bitmap,
0,
0,
width,
height,
matrix,
true);
System.out.println(newbm.getHeight()+""+newbm.getWidth());
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课文故乡课件
- 公务员的辞职报告汇编15篇
- 比的基本性质课件
- 综治宣传月活动总结-(15篇)
- 大学生转专业申请书七篇
- 学校感恩节活动策划15篇
- 参观烈士陵园作文范文
- 书店营销策划方案大全
- 企业会计年终工作总结模板
- 读《幻城》有感合集15篇
- 干部调动审批呈报表
- 初中科学《九年级第四章集体备课》基于“大概念”理念的单元设计计划课件
- 经支气管镜冷冻治疗术
- 中国标准文献分类法二级目录
- 《家务劳动我能行》综合实践课课件
- 2023版高中英语新课标知识考试题库(附答案)
- 臀位助产分娩术课件
- GB/T 5338.1-2023系列1集装箱技术要求和试验方法第1部分:通用集装箱
- 2电流速断保护
- 中耳解剖、生理与疾病 助听器验配课件
- 奥洛他定滴眼液的可行性研究报告
评论
0/150
提交评论