1. 程式人生 > >android中實現PopupWindow跟隨ProgressBar進度顯示

android中實現PopupWindow跟隨ProgressBar進度顯示

早就想寫部落格了,直到今天才開始真正的去寫一篇,接下來奉上今天的主題:實現PopupWindow跟隨ProgressBar進度顯示

最近遇到一個功能實現,大概就是以下這個圖的樣子,上方為PopupWindow,下方有ProgressBar,PopupWindow位置跟隨ProgressBar進度位置動態變化


開始實現吧:

首先例項化PopupWindow

pop_wiew = LayoutInflater.from(this).inflate(R.layout.member_popwindow, null, false);
mPopupWindow = new PopupWindow(pop_wiew
, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

然後去測量PopupWindow的寬高,因為放置位置為PopupWindow的中央:

pop_wiew.post(new Runnable() {
@Override
public void run() {
pop_wiew.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
popwidth = pop_wiew.getMeasuredWidth()
; pophight = pop_wiew.getMeasuredHeight(); } });
因為繪畫過程非同步,所以使用view的post方法,攜帶自身寬高屬性以供獲得,需要注意的是:
pop_wiew.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
若是不設定測量模式,則獲取不到PopupWindow的屬性(已踩過坑)

另外需要注意的是,如果不做任何操作,這樣直接顯示PopupWindow,會導致介面的控制元件獲取不到焦點,並且返回鍵失效(僅針對上圖實現的功能來說),所以需要做如下操作:

mPopupWindow.setTouchable(true);
mPopupWindow.setFocusable(false);
mPopupWindow.setOutsideTouchable(false);
接下來是對Progress進行操作:
mProbarLeftMembercenterExpeience.post(new Runnable() {
@Override
public void run() {
int width = mProbarLeftMembercenterExpeience.getWidth();
int height = mProbarLeftMembercenterExpeience.getHeight();
int[] location = new int[2];
mProbarLeftMembercenterExpeience.getLocationOnScreen(location);
//獲得在螢幕中的x,y值
int x = location[0];
int y = location[1];
//目前popwindow應該在的x值
int poplocation = (int) (width * baifenbi + x);
mPopupWindow.showAtLocation(mProbarLeftMembercenterExpeience, Gravity.NO_GRAVITY,
poplocation - popwidth / 2, y - pophight - height);
    }
});
同理,使用view的post方法獲得自己的屬性,然後首先獲取自身的寬高:
int width = mProbarLeftMembercenterExpeience.getWidth();
int height = mProbarLeftMembercenterExpeience.getHeight();
然後獲得在螢幕中的x,y值:
int[] location = new int[2];
mProbarLeftMembercenterExpeience.getLocationOnScreen(location);
//獲得在螢幕中的x,y值
int x = location[0];
int y = location[1];
最後設定popwindow的位置:
int poplocation = (int) (width * percentage+ x);
mPopupWindow.showAtLocation(mProbarLeftMembercenterExpeience, Gravity.NO_GRAVITY,
poplocation - popwidth / 2, y - pophight - height);
上述程式碼中的percentage為ProgressBar的當前百分比,至於PopupWindow在何處顯示,請看管自行百度。

人生第一遍部落格,如有錯誤,請指出,謝謝觀看!

相關推薦

android實現PopupWindow跟隨ProgressBar進度顯示

早就想寫部落格了,直到今天才開始真正的去寫一篇,接下來奉上今天的主題:實現PopupWindow跟隨ProgressBar進度顯示 最近遇到一個功能實現,大概就是以下這個圖的樣子,上方為PopupWindow,下方有ProgressBar,PopupWindow位置跟隨Pr

【聊技術】在Android實現自適應文字大小顯示

本週的聊技術話題和大家說說如何在Android中實現自適應文字大小顯示。 想象一下,在佈局中,通常顯示文字的區域大小是固定的,但是文字長度並不總是固定的。比如列表中的文章標題、介面下方的按鈕文字等等。 為了儘可能讓這些文字可見,傳統的做法是通過文字長度設定文字大小,或者通過android:ellipsize屬

AndroidTextView文字過長滾動顯示實現

專案中在使用TextView時,總會有因要顯示的內容過多而需要我們進行處理的問題。我們第一時間想到的是TextView的android:ellipsize屬性, 比如 android:ellipsize

android實現透明懸浮的PopupWindow效果

最近做的android專案中經常用到PopupWindow,今天就來總結一下如何實現透明懸浮的PopupWindow效果,廢話不多說,先上圖和程式碼。 下面是PopupWindow的佈局檔案XML: <?xml version="1.0" encoding="ut

Android實現陰影效果

sta 技術 wid 語言 mat floating 大表 ado sch 在Android L推出後,Google提出了全新的設計語言:材質設計。其中很重要的一點就是陰影效果的使用,你可以為每一個View設置一個elevation值,相當於除了x、y之外的z值,z值決定

Linux實現一個簡單的進度條【轉】

做的 會有 發現 文件 rsquo 實時 時間 改進 常見 轉自:http://blog.csdn.net/yuehailin/article/details/53999288 說起進度條,其實大家常常見到,比如說你在下載視頻或文件的時候,提示你當前下載進度的就是我們今天

android實現毛筆效果(View 畫圖)

方法 繪畫 object android中 validate 滑動 一個 lineto 效果 近期有一個項目設計一個APP實現通過觸摸屏實現毛筆寫字效果。傳統的繪畫板程序直接通過Path的moveTo和LineTo便可實現簡單的線條繪畫程序。然而要達到毛筆的筆鋒效果

Unity3d遊戲實現阿拉伯語文字正常顯示

return dex p s != 漢語 div 發現 3d遊戲 let Unity3d遊戲中實現阿拉伯語文字正常顯示 由於項目需求要把遊戲文字顯示為維語版本(維語屬於阿拉伯語系),我先把維語替換進去,之後發現文字是錯的(每個字符都分開了,而且顯示方向也不對)後來在網上查了

Android 實現隊列方式處理優先級信息

div fragment als eth lean @override 需要 一個 原理 需求:當界面在處理消息A時,突然接收到消息B,需要立馬顯示B的信息,然後再繼續顯示消息A,或者接收到消息C,再顯示完消息A後再顯示消息C; 原理很簡單 在一個輪詢中,查詢消息列表中的元

Android實現一個簡易的Http服務器

.get json data ESS public 瀏覽器 顯示 getmethod blank 最近遇到一個需求需要在App中創建一個Http服務器供供瀏覽器調用,用了下開源的微型Htpp服務器框架:NanoHttpd,項目地址:https://github.com/Na

Android實現短音訊和震動的一些總結

好長時間沒有寫部落格了,因為最近事情比較多。所以好長時間沒有寫部落格了。堅持是一件很辛苦的事情。但還需要努力。。。好了,閒話不扯了。因為最近專案中用到了相應的短音訊和震動的功能,所以這裡總結一下相應的內容! 本文知識點: 音訊中的一些知識和常用的API介紹;

AndroidTextView內容過長未顯示省略號的問題

問題描述: 按照UI設計,某個頁面展示資料超長時,需要顯示出省略號。 預期展示(有省略號): 實際展示(無省略號): 具體程式碼: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

Android實現藍芽錄放音

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android實現震動的方法

實現手機震動其實很簡單,手機震動使用是Vibrator類,然後震動也是需要許可權的,在使用之前在AndroidManifest.xml檔案中新增 <uses-permission android:name="android.permission.VIBRATE"/>

android實現CardView

android在 5.0中添加了陰影效果主要通過CardView來實現,在低版本中通過android.support.v7.widget.CardView來實現。 <RelativeLayout xmlns:android="http://schemas.android.com/a

android實現內容搜尋

在編寫android搜尋程式碼的時候,如何去實現搜尋功能,考慮中的有兩種: 自定義搜尋方法:     1.自定義搜尋輸入框,搜尋圖示,搜尋按鈕     2.自定義語音輸入方法     3.自定義常用熱詞內容、樣式     4.自定義瀏覽記錄內容和樣式     5

Android實現tabLayout佈局

1.佈局檔案 <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width=“match_parent” android:layout_height=

Android實現延時執行操作的幾種方法

在Android開發中我們可能會有延時執行某個操作的需求,例如我們啟動應用的時候,一開始呈現的是一個引導頁面,過了兩三秒後,會自動跳轉到主介面。這就是一個延時操作。  下面是實現延時執行操作的幾種方法: 1.使用執行緒的休眠實現延時操作    new Thread() {

Android實現靜態的預設安裝和解除安裝應用

                最近好長時間都沒有寫blog了,主要是因為最近工作上的事以及下載Android原始碼的事耽誤的(下載原始碼這件事會在後續的blog中寫道,這個真的很有意義呀~~),那麼今天來寫點什麼呢?主要的靈感來自於早上看新聞看到一篇文章說有一款應用在後臺中解除安裝使用者手機中的所有瀏覽器的

Android實現「類方法指令抽取方式」加固方案原理解析

一、前言Android中加固方案一直在進步,因為新的加固方案出來就會被人無情的破解脫殼了,從第一代加固方案落地加密dex檔案,第二代加固方案不落地加密dex檔案,在到第三代加固方案類方法抽取,以後後面的