最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)自適應(yīng)屏幕的彈窗廣告

 更新時間:2018年07月20日 09:35:53   作者:Mr_Leixiansheng  
這篇文章主要為大家詳細介紹了Android實現(xiàn)自適應(yīng)屏幕的彈窗廣告,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android實現(xiàn)彈窗廣告的具體代碼,供大家參考,具體內(nèi)容如下

內(nèi)容:彈窗廣告

特點:根據(jù)屏幕尺寸和原圖片比例自適應(yīng)

代碼如下:

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) {
 // 更改樣式,把背景設(shè)置為透明的
 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);
 }
 
 // 初始化布局的參數(shù)
 private void initLayoutParams() {
 // 布局的參數(shù)
 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;//獲得當前設(shè)備的dpi ,像素密度
 float density = metrics.density;//密度比
 return (int) (density * dp + .5f);
 }
}

動態(tài)布局可參考我的文章:安卓動態(tài)布局

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"};
 
 
 @Override
 protected 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的值即可。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android studio集成ijkplayer的示例代碼

    android studio集成ijkplayer的示例代碼

    本篇文章主要介紹了android studio集成ijkplayer的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Android獲取其他應(yīng)用中的assets資源

    Android獲取其他應(yīng)用中的assets資源

    今天小編就為大家分享一篇關(guān)于Android獲取其他應(yīng)用中的assets資源,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Android 如何攔截用戶頻繁操作(點擊事件)

    Android 如何攔截用戶頻繁操作(點擊事件)

    本文主要介紹了Android 如何攔截用戶頻繁操作,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android鍵盤顯示與隱藏代碼

    Android鍵盤顯示與隱藏代碼

    Android鍵盤顯示與隱藏代碼,需要的朋友可以參考一下
    2013-05-05
  • Android SD卡上文件操作及記錄日志操作實例分析

    Android SD卡上文件操作及記錄日志操作實例分析

    這篇文章主要介紹了Android SD卡上文件操作及記錄日志操作的方法,涉及Android針對SD卡與文件操作的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android+SQLite數(shù)據(jù)庫實現(xiàn)的生詞記事本功能實例

    Android+SQLite數(shù)據(jù)庫實現(xiàn)的生詞記事本功能實例

    這篇文章主要介紹了Android+SQLite數(shù)據(jù)庫實現(xiàn)的生詞記事本功能,結(jié)合具體實例形式分析了Android操作SQLite數(shù)據(jù)庫實現(xiàn)生詞記錄功能的操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2017-09-09
  • Android 解決游戲發(fā)行切包資源索引沖突的問題

    Android 解決游戲發(fā)行切包資源索引沖突的問題

    這篇文章主要介紹了Android 解決游戲發(fā)行切包資源索引沖突的問題,幫助大家更好的理解和學(xué)習使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android無障礙監(jiān)聽通知的實戰(zhàn)過程

    Android無障礙監(jiān)聽通知的實戰(zhàn)過程

    開發(fā)微動手勢的時候,做了一個通知觸發(fā)的功能,就是在收到某個預(yù)設(shè)的通知的時候,自動觸發(fā)某個動作,因此需要監(jiān)聽通知消息,這篇文章主要給大家介紹了關(guān)于Android無障礙監(jiān)聽通知的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Android中判斷當前API的版本號方法

    Android中判斷當前API的版本號方法

    下面小編就為大家分享一篇Android中判斷當前API的版本號方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Android開發(fā)中PopupWindow用法實例分析

    Android開發(fā)中PopupWindow用法實例分析

    這篇文章主要介紹了Android開發(fā)中PopupWindow用法,結(jié)合實例形式分析了PopupWindow彈出窗口效果的使用技巧,需要的朋友可以參考下
    2016-02-02

最新評論

广饶县| 乐都县| 宝清县| 喜德县| 通道| 祥云县| 富裕县| 广河县| 桦甸市| 祁东县| 中方县| 泗阳县| 旬邑县| 长丰县| 广西| 东宁县| 东丽区| 吴江市| 西平县| 永春县| 天峻县| 昆明市| 松滋市| 历史| 郓城县| 阳新县| 安远县| 宁国市| 临夏市| 罗甸县| 台江县| 蓬溪县| 山东| 河池市| 烟台市| 宁阳县| 石景山区| 江山市| 平利县| 拜城县| 龙州县|