




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何实现自适应屏幕的弹窗广告
在下给大家分享一下Android如何实现自适应屏幕的弹窗广告,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下内容:弹窗广告特点:根据屏幕尺寸和原图片比例自适应代码如下: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;
}
@Override
protected
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>()
{
@Override
public
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.FIT_XY);
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);
}
@Override
public
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);
}
}动态布局可参考我的文章:安卓动态布局Mainpackage
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
=
{"/20101028/0017029521232265_b.jpg",
"/58pic/13/56/51/95K58PICPFk_1024.jpg",
"/it/u=1615585387,2628665620&fm=27&gp=0.jpg",
"/it/u=1306190881,4135880992&fm=27&gp=0.jpg"};
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setConten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 记忆花开作文800字(8篇)
- 2025年维生素E项目申请报告
- 法律行业合同法条文解读与案例分析
- 2025年美容师(高级)职业技能鉴定实操试卷-美容师实操技能考核结果分析篇
- 回忆与感慨演讲稿13篇
- 2025年物业管理师考试物业管理师考试物业管理企业组织结构与运营优化试题
- 初中远足探险之旅勇敢迈步迎接未来作文(14篇)
- 农村地区绿色农业种植协议
- 职业技能培训在2025年乡村振兴中的区域差异分析报告
- 通信设备维修维护服务协议
- 2025年中考生物模拟测试卷及答案
- 国开《理工英语1》形考任务综合测试
- 高血压的治疗和护理
- 污水处理工程设计投标文件技术方案
- 办公用房简易装修合同样本
- 上海市医疗机构医疗服务项目和价格汇编
- 种子轮投资协议合同协议
- 2025年教师招聘考试教育学心理学试题库含答案
- 车辆油耗管理制度模板
- 工厂防诈骗培训
- 乌鲁木齐市2025年小升初必考题数学检测卷含解析
评论
0/150
提交评论