版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开题报告:学生综合素质评价的理论建构与“落地”路径研究
- 开题报告:新时代我国家庭教育评价指标体系构建研究
- 2024年工程分包方现场作业管理协议版B版
- 2024年度传单发行社交媒体推广合同2篇
- 《质谱法蒋》课件
- 2024年商务促成合作合同范本版B版
- 二零二四年度供应合同的供应物品与供应期限3篇
- 教学计划范文检查记录
- 2024多用途建筑外围结构围墙门楼施工协议
- 《电工电子实践基础》课件第4章
- 测控技术与仪器技术面试
- 2023-2024学年高中诚信考试主题班会考之以诚 答之以信课件
- 小学生课外阅读书目《中国民间故事》质量监测试题(含答案)
- 构建和谐宿舍人际关系课件
- 产品结构工程师年终总结
- 新能源汽车项目融资计划书
- 研学基地设计方案
- 人工智能技术对自动驾驶汽车行业的影响
- 运动中常见骨折的预防与处理
- 生涯发展报告
- 性教育知识讲座香港讲座
评论
0/150
提交评论