android 开屏广告动画,Android 开屏广告

上一篇说了 ios 的开屏广告,这次把 Android 的也发下。逻辑,界面和 ios一致。

需求:广告不是一成不变,要随时更换图片,上下架时间,以及要启动就展示,需要先存到本地,以及点击跳转等问题。

服务端返回的数据格式

adver = (

{

endtime = 1516622424;

id = 7;

link = "https://www.baidu.com";

pic = "/uploads/image/18/01/5a65608db3ebb.png";

}

);

if (data.has("adver") && data.getJSONArray("adver").length() != 0) {

//有广告字段

JSONObject adJsonObj = data.getJSONArray("adver").getJSONObject(0);

Long endtime = adJsonObj.optLong("endtime") * 1000;

String pic = adJsonObj.getString("pic");

String link = adJsonObj.optString("link");

String str_endtime = endtime + "";

//数据有效性判断

if (StringUtils.isEmpty(str_endtime) || StringUtils.isEmpty(pic)) {

return;

}

if (hasAd()) {

//本地有图片

if (adChanged(pic, str_endtime, link)) {

//是新的图片

SaveAdImage(str_endtime, pic, link);

} else {

//do nothing

}

} else {

//本地没图片

SaveAdImage(str_endtime, pic, link);

}

} else {

removeAd();

//没有广告字段

}

private void SaveAdImage(final String end_time, final String _url, final String link)

{

if (isAdPicDownloading) {

return;

}

isAdPicDownloading = true;

Handler handler = new Handler(Looper.getMainLooper());

// final String path = (AppContext.getAppContext().getExternalCacheDir() != null ? AppContext.getAppContext().getExternalCacheDir() : AppContext.getAppContext().getCacheDir()) + "/" + _url.substring(_url.lastIndexOf("/") + 1);

final String path = FileUtils.getSDCardPath() + "/" + AppContext.getAppContext().getPackageName() + "/" + _url.substring(_url.lastIndexOf("/") + 1);

//如果有上次下载失败有临时文件需要删除之后才能正常下载

if (new File(path).exists()) {

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_ENDTIME, end_time);

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_LINK, link);

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_PIC, path);

return;

}

handler.post(new Runnable()

{

@Override

public void run()

{

mKjh.download(path,

URLs.makeOriginImageUrl(_url), new HttpCallBack()

{

@Override

public void onFailure(int errorNo, String strMsg)

{

super.onFailure(errorNo, strMsg);

}

@Override

public void onFinish()

{

isAdPicDownloading = false;

super.onFinish();

}

@Override

public void onSuccess(byte[] t)

{

super.onSuccess(t);

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_ENDTIME, end_time);

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_LINK, link);

if (!path.equals(PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC))) {

removeOldAdFile();

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, DATA_AD_PIC, path);

}

}

});

}

});

}

private void removeOldAdFile()

{

String oldPath = PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC);

if (!StringUtils.isEmpty(oldPath)) {

File oldFile = new File(oldPath);

if (oldFile.exists()) {

oldFile.delete();

}

}

}

activity_start.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/iv_ad_app_start"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/darker_gray"

android:scaleType="centerCrop"

android:visibility="gone">

android:id="@+id/ll_ad_jump"

android:layout_width="wrap_content"

android:layout_height="30dp"

android:layout_gravity="right"

android:layout_marginRight="@dimen/space_15"

android:layout_marginTop="@dimen/space_15"

android:background="@drawable/btn_ad_jump"

android:gravity="center"

android:visibility="gone">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/space_10"

android:layout_marginRight="@dimen/space_2"

android:text="跳过"

android:textColor="@color/white"

android:textSize="@dimen/font_size_15"/>

android:id="@+id/tv_count_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/space_2"

android:layout_marginRight="@dimen/space_10"

android:text="3"

android:textColor="#ff9900"

android:textSize="@dimen/font_size_15"/>

android:id="@+id/ll_default_app_start"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/screen_bg"

android:orientation="vertical"

android:visibility="gone">

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1"

android:gravity="bottom|center">

android:id="@+id/img_start"

android:layout_width="188dp"

android:layout_height="61dp"

android:layout_marginBottom="@dimen/space_30"

android:scaleType="fitXY"

android:src="@drawable/screen"/>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="bottom"

android:layout_marginBottom="@dimen/space_10"

android:layout_weight="1"

android:gravity="bottom|center"

android:text="@string/at365"

android:textColor="@color/screen_text_color"

android:textSize="@dimen/font_size_12"/>

@BindView(id = R.id.iv_ad_app_start)

ImageView ivAdAppStart;

@BindView(id = R.id.ll_default_app_start)

LinearLayout llDefaultAppStart;

@BindView(id = R.id.tv_count_down)

TextView tvCountDown;

@BindView(id = R.id.ll_ad_jump)

LinearLayout llAdJump;

@BindView(id = R.id.img_start)

private ImageView mImageView;

private void showAdAppStartView()

{

llDefaultAppStart.setVisibility(View.GONE);

final String path = PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC);

final String link = PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_LINK);

AppContext.getAppContext().getKjBitmap().display(ivAdAppStart, path, DensityUtils.getScreenW(AppContext.getAppContext()), DensityUtils.getScreenH(AppContext.getAppContext()), null, null,

new BitmapCallBack()

{

@Override

public void onSuccess(Bitmap bitmap)

{

ivAdAppStart.setVisibility(View.VISIBLE);

llAdJump.setVisibility(View.VISIBLE);

final CountDownTimer countDownTimer = new CountDownTimer(3200, 1000)

{

@Override

public void onTick(long millisUntilFinished)

{

tvCountDown.setText((millisUntilFinished) / 1000 + "");

}

@Override

public void onFinish()

{

tvCountDown.setText("0");

redirectTo();

}

}.start();

llAdJump.setOnClickListener(new View.OnClickListener()

{

@Override

public void onClick(View v)

{

countDownTimer.cancel();

redirectTo();

}

});

ivAdAppStart.setOnClickListener(new View.OnClickListener()

{

@Override

public void onClick(View v)

{

if (!StringUtils.isEmpty(link)) {

countDownTimer.cancel();

browserPath = link;

curMode = luchModeBrowser;

redirectTo();

}

}

});

super.onFinish();

super.onSuccess(bitmap);

}

@Override

public void onFailure(Exception e)

{

removeAd();

startDefaultAppStartView();

super.onFailure(e);

}

@Override

public void onFinish()

{

}

});

// timer.schedule(new TimerTask() {

// @Override

// public void run() {

// }

// }, 3 * 1000, 1000);

}

private void removeAd()

{

File file = new File(PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC));

if (file.exists()) {

file.delete();

}

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_ENDTIME, "");

PreferenceHelper.write(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC, "");

}

private void startDefaultAppStartView()

{

ivAdAppStart.setVisibility(View.GONE);

llDefaultAppStart.setVisibility(View.VISIBLE);

Animation animation = AnimationUtils.loadAnimation(this,

R.anim.splash_start);

// 监听动画过程

animation.setAnimationListener(new AnimationListener()

{

@Override

public void onAnimationStart(Animation animation)

{

}

@Override

public void onAnimationRepeat(Animation animation)

{

}

@Override

public void onAnimationEnd(Animation animation)

{

redirectTo();

}

});

mImageView.setAnimation(animation);

}

private boolean hasAd()

{

return !StringUtils.isEmpty(PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_ENDTIME)) && !StringUtils.isEmpty(PreferenceHelper.readString(AppContext.getAppContext(), AppConfig.APP_START, UpdateCommonUnitedTask.DATA_AD_PIC));

}

这段 android 是我之前同事写的,个人感觉写的烂透了,时间容许我会给重构成 demo。先这样吧。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值