




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在Android中实现一个滚动条广告
这篇文章将为大家详细讲解有关怎么在Android中实现一个滚动条广告,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。ViewSwitcher的介绍ViewSwitcher设置动画ViewSwitcher代表了视图切换组件,本身继承了FrameLayout,可以将多个View叠在一起,每次只显示一个组件,ViewSwitcher支持指定动画效果.我们自定义ViewSwitcher的时候,当程序控制从一个View切换到另个View时,我们可以可以重写下面这两个方法来设置组件切换动画效果setInAnimation(Animation
inAnimation)
setOutAnimation(Animation
outAnimation)ViewSwitcher设置view给ViewSwitcher设置view的方法时是调用下面这个方法setFactory(ViewFactory
factory)这个ViewFactory是一个接口,里面有一个makeview方法,正是通过这个方法我们构造并显示在ViewSwitcher,当然我们自定义ViewSwitcher时候,这里是传入一个布局id,这样我们就可以自由的设置显示布局啦~
/*
给viewSwitch添加显示的view,可以自由设置
外部调用
*
@param
layoutId
*/
public
void
addView(final
int
layoutId){
setFactory(new
ViewFactory(){
@Override
public
View
makeView()
{
return
LayoutInflater.from(getContext()).inflate(layoutId,null);
}
});
}实例介绍实现原理还是比较简单,我们可以直接看代码,下面我们直接通过代码来介绍这个控件的使用吧里面都有详细的注释,相信都可以看得懂。/**
*
自由设置view的viewSwitcher
*
Created
by
Administrator
on
2017/5/13.
*/
public
class
CarouselView
extends
ViewSwitcher
{
private
int
mCutItem;
private
int
loopTime;//循环时间
private
MyHandler
myHandler;
private
ArrayList<String>
listString;
public
CarouselView(Context
context)
{
this(context,
null);
}
public
CarouselView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
initData();
initAnimation();
}
/**
*
初始化一些变量
*/
private
void
initData(){
listString
=
new
ArrayList<>();
myHandler
=
new
MyHandler(this);
}
/**
*
给viewSwitch添加显示的view,可以自由设置,外部调用
*
@param
layoutId
自定义view的布局id
*/
public
void
addView(final
int
layoutId){
setFactory(new
ViewFactory(){
@Override
public
View
makeView()
{
return
LayoutInflater.from(getContext()).inflate(layoutId,null);
}
});
}
/**
*
初始化进入和出去动画
*/
private
void
initAnimation(){
setInAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.translate_in));
setOutAnimation(AnimationUtils.loadAnimation(getContext(),
R.anim.translate_out));
}
/**
*
设置数据源并展示view,外部调用
*
@param
mList
*
@param
time
*/
public
void
upDataListAndView(ArrayList<String>
mList,int
time){
mCutItem
=
0;
loopTime
=
time;
if
(null
==
mList)
{
return;
}
listString.clear();
listString.addAll(mList);
updataView(mList.get(0),getCurrentView(),mCutItem);
}
/**
*展示下一条广告
*/
public
void
showNextView()
{
if
(null
==
listString
||
listString.size()
<
2)
{
return;
}
mCutItem
=
mCutItem
==
listString.size()
-
1
?
0
:
mCutItem
+
1;
updataView(listString.get(mCutItem),
getNextView(),mCutItem);
showNext();
}
/**
*
启动轮播
*/
public
void
startLooping()
{
if
(null
==
listString
||
listString.size()
<
2
)
{
return;
}
myHandler.removeMessages(0);
myHandler.sendEmptyMessageDelayed(0,
loopTime);
}
/**
*
停止轮播
*/
public
void
stopLooping(){
myHandler.removeMessages(0);
}
/**
*
在当前view上设置数据
*
@param
text
*
@param
view
*/
private
void
updataView(String
text,View
view,
final
int
mCutItem){
TextView
textView
=
(TextView)
view.findViewById(R.id.tv_carouse_text);
textView.setText(text);
textView.setOnClickListener(new
OnClickListener()
{
@Override
public
void
onClick(View
v)
{
if
(null
!=
onClickItemListener)
{
onClickItemListener.onClick(mCutItem);
}
//Toast.makeText(getContext(),
"你点击了第"
+
position
+
"条广告",
Toast.LENGTH_SHORT).show();
}
});
}
/**
*
@description
主线程Handler
*
@note
因为存在定时任务,并且TextSwitcherView持有Activity的引用
*
所以这里采用弱引用,主要针对内存回收的时候Activity泄露
**/
private
static
class
MyHandler
extends
Handler
{
private
WeakReference<CarouselView>
mRef;
public
MyHandler(CarouselView
view){
mRef
=
new
WeakReference<CarouselView>(view);
}
@Override
public
void
handleMessage(Message
msg)
{
super.handleMessage(msg);
CarouselView
mView
=
this.mRef.get();
mView.showNextView();//展示下一条广告,会调用shownext方法展示下一条广告
mView.startLooping();//启动轮播,间隔后展示下一条
}
}
OnClickItemListener
onClickItemListener;
/**
*
定义一个接口回调,响应广告点击
*/
interface
OnClickItemListener{
void
onClick(int
position);
}
public
void
setOnClickListener(OnClickItemListener
onClickListener){
this.onClickItemListener
=
onClickListener;
}
}看完了代码之后,接着我们来看一下外部的使用方法外部使用方法外部调用
carouselView.addView(R.layout.itemview);
carouselView.upDataListAndView(mList,
3000);
carouselView.setOnClickListener(new
CarouselView.OnClickItemListener()
{
@Override
public
void
onClick(int
position)
{
Toast.makeText(mContext,
"你点击了第"
+
position
+
"条广告",Toast.LENGTH_SHORT).show();
}
});itemview的布局<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginLeft="10dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_carouse_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:gravity="center"
android:text="111"/>
</LinearLayout>设置进入动画translate_in.xml<?xml
version="1.0"
encoding="utf-8"?>
<set
xmlns:android="/apk/res/android"
android:interpolator="@andr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年纺织工程师实操考核的试题及答案
- 决胜中考物理试题及答案
- 2024年设计师职业规划试题及答案
- 广告设计师考试设计流程管理题及答案
- 公司法 司法试题及答案
- 探讨2024年美术设计师考试题型试题及答案
- 机床初级考试试题及答案
- 广告设计师的教学与培训方法 试题及答案
- 三天面试题及答案
- 汶上二招试题题库及答案
- 职业道德与法律第一课第一节课件市公开课一等奖省赛课微课金奖课件
- 部编人教版《道德与法治》九年级下册教案(全册)
- 2024春期国开电大思政课《中国近现代史纲要》在线形考(专题检测一至八)试题及答案
- 全过程工程咨询服务项目管理服务方案
- 复方氨基酸注射液(17AA-II)-临床用药解读
- 贫血中医辨证分析
- PLC的故障排除与维护技巧与方法
- 2019版新人教版高中英语必修+选择性必修共7册词汇表汇总(带音标)
- 微波技术与天线实验3利用HFSS仿真分析矩形波导
- GJB9001C内部审核检查表
- 烟草雪茄培训课件讲解
评论
0/150
提交评论