Android圖片加載尺寸監(jiān)控

前言

安卓開發(fā)過程中梳猪,很多時候都會用到加載網(wǎng)絡圖片麻削,而加載這些網(wǎng)絡圖片往往又很占內(nèi)存,所以春弥,我們最好對這些圖片進行一個監(jiān)控呛哟。比如說,imageView的寬和高為40dp匿沛,然后經(jīng)過轉換扫责,大概是120px左右。也就是說逃呼,我們加載的圖片尺寸鳖孤,其實只要120px就行了。如果后臺返回的圖片尺寸是300px*300px抡笼,那多出的180px是沒有意義的苏揣,只會浪費內(nèi)存和流量。所以推姻,我們在開發(fā)的時候腿准,要對圖片進行一個監(jiān)控。

效果圖


如果網(wǎng)絡圖片的尺寸拾碌,大于本地imageview設置的尺寸,并且超過一定數(shù)值(比如超過100px)街望,就彈框顯示校翔,展示這張圖片,還有在哪個Activity灾前,圖片鏈接防症,網(wǎng)絡圖片和本地imageview的尺寸對比。然后再把這些信息告訴后端哎甲,讓他們下發(fā)尺寸小一點的網(wǎng)絡圖片蔫敲。

代碼實現(xiàn)

首先是建立一個統(tǒng)一加載圖片的方法,這個一般都會有:

    /**
     * 加載網(wǎng)絡圖片
     */
    public void loadUrlImage(final Activity activity, final String url, final ImageView imageView) {
        Glide.with(activity).load(url).into(imageView);
        if (isShowDialog) {
            checkImgSize(activity, url, imageView);
        }
    }

然后炭玫,就是判斷奈嘿,開發(fā)版就開啟圖片監(jiān)控:,然后去獲取網(wǎng)絡圖片的尺寸:

    /**
     * 獲取網(wǎng)絡圖片尺寸
     */
    private void checkImgSize(final Activity activity, final String url, final ImageView imageView) {
        Glide.with(activity)
                .load(url)
                .asBitmap()
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(final Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        imageView.post(new Runnable() {
                            @Override
                            public void run() {
                                if (resource.getWidth() - imageView.getWidth() > imgSize || resource.getHeight() - imageView.getHeight() > imgSize) {
                                    showDialog(activity, url, resource.getWidth(), resource.getHeight(), imageView.getWidth(), imageView.getHeight());
                                }
                            }
                        });
                    }

                    @Override
                    public void onLoadFailed(Exception e, Drawable errorDrawable) {

                    }
                });
    }

然后根據(jù)獲取的圖片尺寸和本地的進行比較吞加,如果超出了當初設置的值裙犹,那就彈框顯示:

    /**
     * 彈框
     */
    private void showDialog(Activity activity, final String url, int urlWidth, int urlHeight, int imgWidth, int imgHeight) {
        SharedPreferences sp = activity.getSharedPreferences("imgSizeSp", MODE_PRIVATE);
        final SharedPreferences.Editor editor = sp.edit();
        final String urls = sp.getString("img", "");
        if ((dialog == null || (dialog != null && !dialog.isShowing())) && !urls.contains(url)) {
            dialog = new Dialog(activity);
            View view = LayoutInflater.from(activity).inflate(R.layout.show_img_size_dialog, null);
            TextView textView = (TextView) view.findViewById(R.id.tv_content);
            ImageView imageView = (ImageView) view.findViewById(R.id.iv_pic);
            Button btn_notip = (Button) view.findViewById(R.id.btn_notip);
            Button btn_cancel = (Button) view.findViewById(R.id.btn_cancel);
            Glide.with(activity).load(url).into(imageView);
            btn_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
            btn_notip.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    editor.putString("img", urls + url).apply();
                    dialog.dismiss();
                }
            });
            textView.setText(activity.getLocalClassName() + "\n\n" + url + "\n\n" + "圖片超出View尺寸\nbitmap:" + urlWidth + " * " + urlHeight + "\nview:" + imgWidth + " * " + imgHeight);
            dialog.setContentView(view);
            dialog.show();
        }
    }

總結

思路大概就是這樣尽狠,代碼優(yōu)化就看人吧。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叶圃,一起剝皮案震驚了整個濱河市袄膏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掺冠,老刑警劉巖沉馆,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異德崭,居然都是意外死亡斥黑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門接癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來心赶,“玉大人,你說我怎么就攤上這事缺猛∮Ы校” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵荔燎,是天一觀的道長耻姥。 經(jīng)常有香客問我,道長有咨,這世上最難降的妖魔是什么琐簇? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮座享,結果婚禮上婉商,老公的妹妹穿的比我還像新娘。我一直安慰自己渣叛,他們只是感情好丈秩,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淳衙,像睡著了一般蘑秽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箫攀,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天肠牲,我揣著相機與錄音,去河邊找鬼靴跛。 笑死缀雳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的梢睛。 我是一名探鬼主播俏险,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼严拒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竖独?” 一聲冷哼從身側響起裤唠,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莹痢,沒想到半個月后种蘸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡竞膳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年航瞭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坦辟。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡刊侯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锉走,到底是詐尸還是另有隱情滨彻,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布挪蹭,位于F島的核電站亭饵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梁厉。R本人自食惡果不足惜辜羊,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望词顾。 院中可真熱鬧八秃,春花似錦、人聲如沸肉盹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垮媒。三九已至,卻和暖如春航棱,著一層夾襖步出監(jiān)牢的瞬間睡雇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工饮醇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留它抱,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓朴艰,卻偏偏與公主長得像观蓄,于是被迫代替她去往敵國和親混移。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評論 25 707
  • 1侮穿、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,988評論 3 119
  • 看山是山歌径,頭腦簡單,傻B亲茅』仡酰看山不是山,世事皆洞穿克锣,牛B茵肃。看山還是山袭祟,悠然似神仙验残,逗B。
    山里佬閱讀 198評論 0 0
  • Xcode 9 中遇到的問題 問題一: 更新Xcode 9 之后之前定義的代碼塊不能夠使用了 解決方法: 修改 選...
    鄉(xiāng)水情緣閱讀 778評論 0 0
  • 春看花開秋葉掃 夏日養(yǎng)鵝冬柴燒 漫步田梗離喧囂 杏下賞月椅上搖 茶花簇擁華年笑 一覺醒來非年少 人生夕陽不盼高 閑...
    依山賞月閱讀 990評論 19 30