1. 程式人生 > >Android 高仿QQ空間廣告位 ——— 一個位置來回切換兩張廣告圖

Android 高仿QQ空間廣告位 ——— 一個位置來回切換兩張廣告圖

這裡寫圖片描述

刷動態時無意間發現了這個效果覺得用在打廣告上實在是妙,使用者只需要上下滑動列表就會自動切換廣告圖(感興趣的可以在刷空間的時候留意一下)。

一:接下來就來說說這個效果的具體實現思路

  • 通過自定義ImageView、繪製兩張圖片在上面。通過刮刮卡原理在ImageView上繪製一個圓不斷加大半徑來顯示第二張圖片
  • 當廣告位(也就是ImageVIew)剛好完全顯示在螢幕底部時,便開始根據圖片距離底部的距離來顯示第二張廣告(圖片)

二:怎麼知道View剛好顯示在螢幕底部呢?

View中有一個getLocationOnScreen()函式可以用來獲取當前view所在螢幕上的座標(以左上角位座標點),通過設定RecyclerView的滑動監聽來不斷獲取View的座標如下:

int[] location = new int[2];
//獲取view在螢幕上的座標
getLocationOnScreen(location);
//x座標
int x = location[0];
//y座標
int y = location[1];

三:將需要展示的兩張圖片繪製在ImageView上,先繪製的會置於底部顯示

重寫onMeasure()函式獲取View的寬高並解析圖片

private int[] images = {R.drawable.waller_three, R.drawable.waller};

@Override
protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); /*獲取view的高寬*/ int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); //以view的大小繪製一個矩形, RectF rectF = new RectF(0, 0, width, height); /*解析圖片*/ Bitmap background = ((BitmapDrawable) getResources().getDrawable(images[0
])).getBitmap();//置於底部的圖片 Bitmap frontImage = ((BitmapDrawable) getResources().getDrawable(images[1])).getBitmap();//置於頂部的圖片 /*建立一個空bitmap*/ Bitmap frontBg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //在frontBg 上做畫 Canvas frontCanvas = new Canvas(frontBg); }

四:接下就是繪製bitmap顯示在ImageView上

@Override
@SuppressLint("DrawAllocation")
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //將顯示於頂部的圖片繪製到frontCanvas畫布上
    frontCanvas.drawBitmap(frontImage, null, rectF, null);
    //繪製背景廣告  
    canvas.drawBitmap(background, null, rectF, null);
    //繪製前景廣告
    canvas.drawBitmap(frontBg, null, rectF, null);
    //請注意canvas繪製的順序,為什麼上層廣告需要 空bitmap呢? 因為執setXfermode操作需要canvas,需要建立新的canvas中介
    //一句話,canvas正常繪製,對上層圖片操作,因此需要Canvas frontCanvas = new Canvas(frontBg);   
    //frontCanvas給空的frontBg附上bitmap內容(真實的frontImage),執行Xfermode操作,使用frontCanvas
}


這裡就是依賴於paint的一個 Xfermode 屬性Xfermode 教學 —>paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 取兩層繪製交集,顯示下層內容

五:初始化我們的paint,並在滑動的時候畫圓這樣就可以使得底部的圖片顯示出來

private void init() {
    paint = new Paint();
    paint.setAlpha(0);
    /*在已有的影象上繪圖將會在其上面新增一層新的圖層,如果新圖層的paint是不透明的,那麼它將遮擋住下面的paint;
    如果新圖層它是部分透明的,那麼它不透明的地方將會被染上下面的顏色*/
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
    paint.setStyle(Paint.Style.FILL);
    paint.setAntiAlias(true);
    paint.setStrokeWidth(0);
    //設定筆觸和連線處能更加圓滑
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeCap(Paint.Cap.ROUND);
}

/**
 *繪製兩個圖片的交集部分,達到顯示兩個圖片的目的
 */
private void getLocation() {
    int[] location = new int[2];
    //獲取view在螢幕上的座標
    this.getLocationOnScreen(location);
    int y = location[1];
    //圖片在螢幕中的話 0 < y  圖片完全顯示在螢幕中
    int height = y + getHeight();//view底部距離螢幕頂部的高度
    if (y > 0 && screenHeight >= height) {
        //圖片顯示在螢幕中了 ,r即為圓的半徑
        r = (float) ((screenHeight - height) * 1.5);
        frontCanvas.drawCircle(width, height, r, paint);
    } else {
        //向下滑動
        if (r < width)
            r = 0;
    }
    invalidate();}

github 傳送地址(不知道是不是同一作者),https://github.com/CocoQueen/QQZoneAdvertising

相關推薦

Android 仿QQ空間廣告 ——— 一個位置來回切換廣告

刷動態時無意間發現了這個效果覺得用在打廣告上實在是妙,使用者只需要上下滑動列表就會自動切換廣告圖(感興趣的可以在刷空間的時候留意一下)。一:接下來就來說說這個效果的具體實現思路通過自定義ImageView、繪製兩張圖片在上面。通過刮刮卡原理在ImageView上繪製一個圓不斷

使用RecyclerView實現QQ空間廣告一個位置時偶遇bug

前段時間就發現手機qq空間內,在動態中插入的廣告在滑動的時候有貓膩(一個位置來回切換兩張廣告圖),一直想要去實現這個效果,但是一直都沒有時間去研究,昨天刷空間的時候就又看到了這個效果,所以就在網上找了個帖子在午飯時間研究了一下,不是很複雜,就敲了敲,練了練手。結果執行的時候

Android仿QQ下拉重新整理

此次牽扯到的知識點有:Android手勢,Handler,java多執行緒,java聚合,Android幀動畫,屬性動畫; 如果有對上述提到過的知識點不太瞭解,或者程式設計能力較差的小夥伴可以關閉此頁面啦一,因為接下來的裝逼過程 你可能會是一臉懵B 。如果你執意要看也沒事啦,因

Android仿qq閱讀/微信讀書/掌閱亮選擇文字效果

前言    最近做epub閱讀器,有劃線的需求,即類似於qq閱讀/微信讀書/掌閱那樣的移動選擇文字並高亮劃線等,在這裡記錄下實現的思路供大家參考,功能都還沒有上線,等優化徹底了,我可以考慮抽出這個模組開源下,嘿嘿! 實現的效果圖 可以看到,這個效果還是可

Android仿qq及微信底部選單的幾種實現方式

最近專案沒那麼忙,想著開發app的話,有很多都是重複,既然是重複的,那就沒有必要每次都去寫,所以就想著寫一個app通用的基本框架,這裡說的框架不是什麼MVC,MVP,MVVM這種,而是app開發的通用模式,一般的app都是底部有幾個選單按鈕,類似qq這樣的,只不

Android 仿QQ 好友分組列表

本帖最後由 憤怒的小鳥 於 2012-11-4 10:53 編輯實現的效果如下: 用ExpandableListView實現,先看Activity的程式碼: public class BuddyActivity extends Activity {      ExpandableListView exp

Android檢視效果】仿QQ空間滑動改變標題欄顏色

最近在倒騰公司之前的專案,發現之前的介面是個白色標題欄,不是很美觀,所以做了些改進。 先看效果圖 簡單說下思路,整個佈局大體上是ScrollView裡面包含了一個ImageView和RecyclerView,所以先得到ImageView的高度,當ScrollView向上滑動

Android仿京東APP首頁“京東快報”自動向上滾動的廣告

##前言 上次在京東APP上買東西時,發現首頁中間有塊叫“京東快報”的欄目,其中廣告條能自動向上滾動,效果還不錯,看到這個效果,第一個念頭就是我能不能實現,於是就誕生了這篇文章。 我們看看實現後的效果: ##實現原理 起初看到這個效果時,第一個想法就是向上移

Android 仿QQ側滑刪除—一個滿足ListView、RecyclerView以及其他View通用的側滑刪除

對於側滑刪除已經是見慣不慣的了,我也一直有寫類似QQ那樣的側滑刪除控制元件的想法,雖然研究一段時間的自定義View,然對自定義ViewGroup實戰還是較少,並且側滑刪除還要考慮大量的事件分發機制,比如如何處理子控制元件與父控制元件之間的滑動衝突以及一系列的do

Android自定義View,仿QQ音樂歌詞滾動控制元件!

最近在以QQ音樂為樣板做一個手機音樂播放器,原始碼下篇博文放出。今天我想聊的是這個QQ音樂播放器中歌詞顯示控制元件的問題,和小夥伴們一起來探討怎麼實現這個歌詞滾動的效果。OK,廢話不多說,先來看看效果圖:好,接下來我們就來看看怎麼實現這樣一個效果。本文主要包括如下幾方面內容:

根據牛腩老師的mono for android 視訊,自己用vs2017的xamarin for android仿一個登入介面跳轉主介面的程式

//定義四個控制元件         private Button btn_visit;         private Button btn_login;         private Button btn_cancel;         private EditText txt_name;      

Android帶你解析ScrollView--仿QQ空間標題欄漸變

緒論 今天來研究的是ScrollView-滾動檢視,滾動檢視又分橫向滾動檢視(HorizontalScrollView)和縱向滾動檢視(ScrollView),今天主要研究縱向的。相信大家在開發中經常用到,ScrollView的功能已經很強大了,但是仍然滿足不

jsp實現仿QQ空間新建多個相冊名稱,向相冊中加入照片

ext forname parseint type 登錄失敗 ocr cli str null 工具:Eclipse,Oracle,smartupload.jar。語言:jsp,Java;數據存儲:Oracle。 實現功能介紹: 主要是新建相冊,能夠建多個相冊,

android仿今日頭條小視訊轉場切換效果

可以先看看今日頭條效果 功能分析 點選列表上的一個item,該item會放大,最後直接全屏播放小視訊,剛開始看上去,以為是個共享元素的轉場動畫, 後來想到,共享元素要在android 5.0以上支援,而今日頭條顯然不會只支援5.0版本以上 筆者想到的一種方案就是進入Acti

GFF仿QQ客戶端及伺服器

一、GFF簡介 GFF是仿QQ介面,通訊基於SAEA.MessageSocket、SAEA.Http、SAEA.MVC實現包含客戶端和伺服器的程式,原始碼完全公開,專案原始碼地址:https://github.com/yswenli/GFF ,大家可以去我的github瞭解,歡迎follow,st

GFF仿QQ客戶端及服務器

col ide {0} sed ogr ini 交流 包含 tor 一、GFF簡介 GFF是仿QQ界面,通信基於SAEA.MessageSocket、SAEA.Http、SAEA.MVC實現包含客戶端和服務器的程序,源碼完全公開,項目源碼地址:https://github

iOS感測器集錦、飛機大戰、開發除錯工具、強制更新、Swift仿QQ空間頭部等原始碼

iOS精選原始碼 飛機大作戰 iOS優質部落格 Apple於北京時間9月17日晚在官網釋出了Xcode 10正式版,QiShare團隊成員於9月18日中午統一升級以對現有專案做適配。期間,作者發現某專案使用Xcode 10編譯

仿QQ空間之打造個性化可拉伸頭部控制元件

(使用格式工廠將視訊轉換成gif格式時影響了gif效果,執行在真機上不影響效果) 這個效果是採用ListView並給ListView新增一個頭部來實現的,當然了要處理ListView的上拉,下拉及鬆開肯定要對ListView自定義; 先來看下ListView的頭部xml檔案:

仿QQ時間選擇器

###在軟體開發中我們會需要各種選擇選擇器,比如設定個人年齡時需要使用時間選擇器。設定地址需要用到地址選擇,還有身高等等。 ####下面介紹一下使用方法: 時間選擇器的使用: //這裡設定的是選擇之後可以回顯資料,所以先建立一個SP設定基本數值 Stri

android仿京東快報(垂直迴圈滾動新聞欄)

京東的垂直滾動新聞欄的實現原理: 就是一個自定義的LinearLayout,並且textView能夠迴圈垂直滾動,而且條目可以點選,顯示區域最多顯示2個條目,並且還有交替的屬性垂直移動的動畫效果,通過執行緒來控制滾動的實現。 不多說看效果: