编写Android的项目时大都会碰到一个需求就是广告的问题,一般广告也都是在启动页上,
有一个大概三到五秒的广告,然后跳转进下一个界面,或者点击跳过时进入下一个界面,
之前写过类似的功能,然而没有写博文的习惯,所以每次需要用到这个功能的时候总是需要自己
再写一次逻辑,这次干脆记下来,免得下次还要重复写这个逻辑。效果如下,图片是随便找的,
有点难看,主要看思路:
首先建立一个activity,并建好xml布局文件,先上xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/welcome_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.myapplication.view.start_activity.WelcomeActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<!--这个imageview放置广告图-->
<ImageView
android:id="@+id/welcome_ad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@mipmap/chart_main" />
<!--这个textview用来显示倒数秒数-->
<TextView
android:layout_width="@dimen/x70"
android:layout_height="@dimen/y20"
android:background="@drawable/search_shape"
android:gravity="center"
android:textColor="@color/bg_Black"
android:textSize="@dimen/x16"
android:id="@+id/btn_skip"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="@dimen/x5"
android:layout_marginTop="@dimen/y20" />
</RelativeLayout>
<!--这个imageview是预留的logo图放置位置,上面三分之二为广告图-->
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3"
android:scaleType="fitXY" />
</LinearLayout>
大致布局就是这样,welcome_ad是放置广告的控件,textView是放置倒数计时的时间的,
做好了布局,就开始写逻辑和功能了,首先需要在放置广告的地方放置图片,既然是广告,肯定要
从网络上获取图片了,我用的是xutils框架,比较实用的网络请求框架,使用方法网上一堆堆,
这里就不赘述了,**好了,现在开始,先推荐一个加载图片的简单方式:
//这里的GET_AD是图片的网络地址
x.image().bind(imageView,GET_AD);
xutils ,就是这么简单,广告打完了,正式开始,图片一般是从网络上获取,
我做项目之前的需求是图片从服务器获取,图片展示的时间也是由服务器来控制:
/*
* @params url 获取图片路径的接口
* */
x.http().get(new RequestParams(url), new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String s) {
try {
//通过Json解析数据
JSONObject object = new JSONObject(s);
//imgPath是图片的网络路径
String imgPath = object.getString("pic");
//timeLong是图片展示的时间长度
final String timeLong = object.getString("count");
x.image().bind(welcome_ad, imgPath);
//开启一个线程,用来对展示时间进行控制
new Thread() {
@Override
public void run() {
// while (flag) {
try {
sleep(Integer.valueOf(timeLong) * 1000);
/**这里进行展示时间到了之后的操作**/
/******************/
/******************/
} catch (InterruptedException e) {
e.printStackTrace();
}
// }
}
}.start();
//这个线程是给textView发送要填充的值用的
new Thread() {
@Override
public void run() {
try {
if (time != null && !time.equals("")) {
for (int i = Integer.valueOf(time); i >= 0; i--) {
//我在这里用的是handler来发送消息
//每隔一秒发送一次消息
mHandler.sendEmptyMessage(i);
sleep(1000);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable throwable, boolean b) {
}
@Override
public void onCancelled(CancelledException e) {
}
@Override
public void onFinished() {
}
});
OK,逻辑已经屡清楚了,上面一个开启了两个线程,第一个是对图片展示的时间进行控制,
第二个是对图片右上角的跳过按钮内的内容进行控制,handler已经开始发送消息了,接下来就该接收
消息了:
//接收handler发送的消息,进行处理
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//这里的btn_skip是跳过按钮,我用的是TextView;
btn_skip.setText("(" + String.valueOf(msg.what) + "s)跳过");
}
};
好啦,基本思路就是这样了,这样一来就实现了倒计时展示图片,接下来还要有点击跳过后直接跳过的
动作:
//跳过按键
btn_skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在这里写跳过出发后的操作
}
});
启动页的广告到这里就已经实现了,代码比较简单,就不上demo了,觉得我的文章对你有
帮助的话,帮我顶一下吧,如有错误之处,也欢迎指出。
本文为博主的原创文章,转载请注明出处