转载请注明出处:安卓弹窗广告(自适应屏幕)_Mr_Leixiansheng的博客-CSDN博客

内容:弹窗广告

特点:根据屏幕尺寸和原图片比例自适应

代码如下:

package com.example.leixiansheng.addialog;import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;/*** Created by Leixiansheng on 2018/6/28.*/public class AdDialog extends Dialog implements View.OnClickListener {private Context context;private float finalWidth;       //最终宽度private float finalHeight;    //最终高度private int padding = 50;        //屏幕边距间隔private int picWidth;       //图片真实宽度private int picHeight;      //图片真实高度private String mUrl;public AdDialog(Context context,String url) {// 更改样式,把背景设置为透明的super(context, R.style.LocationDialogStyle);this.context = context;mUrl = url;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.dialog_ad);calculateHeightAndWidth();//初始化布局的位置initLayoutParams();setCancelable(false);setCanceledOnTouchOutside(false);}/*** 按实际图片比例对其的宽高进行缩放*/private void calculateHeightAndWidth() {DisplayMetrics dm = context.getResources().getDisplayMetrics();final int screenWidth = dm.widthPixels;final int screenHeight = dm.heightPixels;//获取图片真正的宽高Glide.with(context).load(mUrl).asBitmap()//强制Glide返回一个Bitmap对象.into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {picWidth = bitmap.getWidth();picHeight = bitmap.getHeight();if (picHeight > picWidth) {//真实图片高度大于宽度时finalHeight = screenHeight - padding * 2;finalWidth = ((picWidth * 100) / picHeight) * finalHeight/100;} else {//真实图片宽度大于高度时finalWidth = screenWidth - padding * 2;finalHeight = ((picHeight * 100) / picWidth) * finalWidth/100;}if ((int) finalWidth > screenWidth || (int) finalHeight > screenHeight) {//放大后的比例超出屏幕时finalWidth = picWidth;finalHeight = picHeight;}initAdView(finalWidth, finalHeight);}});}@SuppressLint("ResourceType")private void initAdView(float width, float height) {RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rl_ad);ImageView ivAd = new ImageView(context);ivAd.setScaleType(ImageView.ScaleType.CENTER_CROP);ivAd.setId(222);ivAd.setOnClickListener(this);
//      RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(UIUtils.px2Dp((int) width), UIUtils.px2Dp((int) height));RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams((int) width, (int) height);params1.addRule(RelativeLayout.CENTER_HORIZONTAL);params1.setMargins(0, dp2Px(50), 0, 0);relativeLayout.addView(ivAd, params1);Glide.with(context).load(mUrl).crossFade().into(ivAd);ImageView ivCancel = new ImageView(context);ivCancel.setId(333);ivCancel.setOnClickListener(this);ivCancel.setImageResource(R.drawable.icon_ad_close);RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(dp2Px(30), dp2Px(30));params2.addRule(RelativeLayout.ALIGN_PARENT_TOP);params2.addRule(RelativeLayout.ALIGN_END,222);relativeLayout.addView(ivCancel,params2);}// 初始化布局的参数private void initLayoutParams() {// 布局的参数WindowManager.LayoutParams params = getWindow().getAttributes();params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER;getWindow().setAttributes(params);}@Overridepublic void onClick(View v) {switch (v.getId()) {case 222:Toast.makeText(context, "你点击了广告,即将进入···",Toast.LENGTH_SHORT).show();dismiss();break;case 333:dismiss();break;}}public int dp2Px(int dp){/*1、px = dp * (dpi / 160)2、px/dp = density;//像素密度比*/DisplayMetrics metrics = context.getResources().getDisplayMetrics();
//        int dpi = metrics.densityDpi;//获得当前设备的dpi ,像素密度float density = metrics.density;//密度比return (int) (density * dp + .5f);}
}

动态布局可参考我的文章:安卓动态布局

Main

package com.example.leixiansheng.addialog;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;import java.util.Random;public class MainActivity extends AppCompatActivity {private String[] adUrls = {"http://pic17.photophoto.cn/20101028/0017029521232265_b.jpg","http://pic.58pic.com/58pic/13/56/51/95K58PICPFk_1024.jpg","http://img5.imgtn.bdimg.com/it/u=1615585387,2628665620&fm=27&gp=0.jpg","http://img1.imgtn.bdimg.com/it/u=1306190881,4135880992&fm=27&gp=0.jpg"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);randomAd();new AdDialog(this, randomAd()).show();}private String randomAd() {int i = (int) (Math.random() * (adUrls.length));     // 0 到 3  随机生成return adUrls[i];}
}

PS:当真实图片长度大于宽度时,图片可能距屏幕上方过近,自己修改padding值,或者增加setMargins的值即可。楼主就偷个懒啦,啊哈哈~~

安卓弹窗广告(自适应屏幕)相关推荐

  1. adb广告拦截 android,IT之家学院:使用adb揪出安卓后台弹窗广告APP原形

    感谢IT之家网友 懒猫咪的夏天 的投稿 背景 相信不少安卓用户中过影子弹窗广告的困扰,这种推广APP本体在后台运行,而且可以在其他APP上弹出覆盖广告,一不小心就会误操作,点击广告或者下载APP,着实 ...

  2. 【经验分享】用adb揪出安卓APP弹窗广告的原形

    背景 相信不少安卓用户中过影子弹窗广告的困扰,这种推广APP本体在后台运行,而且可以在其他APP上弹出覆盖广告,一不小心就会误操作,点击广告或者下载APP,着实令人恶心. 以前的广告软件只在通知栏会推 ...

  3. Google下重手了!安卓App广告弹窗被打击

    2019独角兽企业重金招聘Python工程师标准>>> 说起安卓用户最烦的东西,安卓App广告绝对算是一个.由于安卓独特的生态特点,很多安卓App都以广告作为主 要盈利途径.但打打一 ...

  4. 视频打赏/付费视频引流吸粉/定时弹窗广告+自带视频+支付接口+自适应设计/带安装教程

    源码pc和H5自适应!视频引流吸粉源码,弹窗支付!自带上万部高清视频!绝对是吸金神器. 功能介绍: 1.带有开启是否连续自动播放功能 2.支持手动点击看下一个视频 3.支持引流跳转指定网址,产品地址, ...

  5. 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能

    安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...

  6. JS实现对联广告和弹窗广告代码,可同时关闭不随屏幕滚动

    JS代码如下: <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8&quo ...

  7. 简易记事本广告弹窗_人民日报批弹窗广告,教你几个屏蔽弹窗广告的小技巧

    弹窗广告,对于经常上网的人来说,一定不陌生."不请自来"以及"赖着不走",可以说是弹窗广告的最大特征.天下网友苦弹窗广告久矣-- 近日,人民日报刊文<&q ...

  8. 屏蔽上网时弹窗广告,防止追踪、恶意域名,过滤横幅广告、以及视频广告的方法

    Adblock Plus 是当下最流行的浏览器扩展. 搜索一下这一个小插件,下载现在安装到你的浏览器上就OK.下面是使用教程. 使用教程 什么是 adblocker(广告过滤器)? 如何过滤广告 如何 ...

  9. 响应式(自适应屏幕)

    一 . css中@media写法 @media only screen and (min-width: 1024px)最小宽度1024 Safari 版本5.1.7(7534.57.2)支持 chro ...

最新文章

  1. 关于问题的讨论不应停留在人的维度上
  2. Winforms-GePlugin-Control-library
  3. html多重边框,中间空白,CSS实现多重边框
  4. boost::fusion::flatten_view用法的测试程序
  5. Net设计模式实例之单例模式( Singleton Pattern)
  6. 程序员制作出价值5亿外卖神器却不能取消订单,你知道吗?
  7. Oracle 10g 高级安装图文教程(二)
  8. tf卡测试软件_真正的白菜价?1G不到1元,铠侠(原东芝存储)microSD卡评测
  9. c# 全局钩子实现扫码枪获取信息。
  10. shell编程-条件判断与流程控制
  11. 计算机并口被禁用,电脑并口被禁用怎么办
  12. 关于地理数据坐标转换
  13. 如何遮挡电影英汉字幕
  14. linux系统下mysql编码格式,Windows、Linux系统下mysql编码设置
  15. 大话设计模式—访问者模式
  16. 美通企业日报 | 牛文文称明年创业要弯腰干脏活累活;高校百英里接力赛北大清华同济前三...
  17. Ubuntu ROS 安装
  18. 留下来慢慢感悟(关于session和cookie)
  19. win10将搜索栏缩小
  20. 毫米波雷达DAC1000EVM预备知识自觉(笔者自学笔记)

热门文章

  1. 国防科大计算机优势,报考国防科技大学的优缺点,你知道的有多少?
  2. WPF中使用Data Annotations验证Model
  3. java生成P12秘钥
  4. 在Vue中使用Font Awesome
  5. android纯净版输入法,Android输入法爬坑记
  6. perl下载文件和图片
  7. 20英里还是60英里?
  8. ubuntu常用软件安装合集
  9. 如何成为一个优秀的营销人
  10. AVAST 8.0网络版 提示我是盗版用户,为何还能升级更新?