想實現圖中這樣中間有半透明窗體的效果么?
Android 在列表List中顯示半透明小窗體效果的控件,多的不多直接上代碼,要說的都在注釋里了:
Android 在列表List中顯示半透明小窗體效果的控件,多的不多直接上代碼,要說的都在注釋里了:
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.TextView;
/**
* 窗口中間顯示半透明提示框的小組件
* 用法:1. new 2. showPrevLetter(String prevLetter)
* @author LL
*
*/
public class PrevLetterDialog {
//窗體消失的延時時間
private static final int DELAYED_HIDEN = 500;
// 實現Runnable接口的類
private RemoveWindow mRemoveWindow = new RemoveWindow();
//在Handler里能實現對UI線程的修改
private Handler mHandler;
//窗體管理器
private WindowManager mWindowManager;
//顯示在窗體中間半透明的字體框
private TextView mDialogText;
//是否正在顯示中
private boolean mShowing;
//是否準備好顯示了
private boolean mReady;
//顯示在窗體中的字符
private char mPrevLetter = Character.MIN_VALUE;
/**
* 注明:context一定要在可見UI中通過getContext()獲得,否則會拋異常。
* @param context
*/
public PrevLetterDialog(Context context) {
//得到窗體管理器
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
//得到布部創建者
LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//得到TextView
mDialogText = (TextView) inflate.inflate(R.layout.list_position, null);
//設TextView為可見
mDialogText.setVisibility(View.INVISIBLE);
//通過handler把mDialogText展示出來
mHandler = new Handler();
//要用post可實現在多線程里調用UI線程并改變
mHandler.post(new Runnable() {
public void run() {
mReady = true;
//窗體的布局參數
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
//把TextView添加到窗體中去
mWindowManager.addView(mDialogText, lp);
}
});
}
//設置可見性
public void setmReady(boolean mReady) {
this.mReady = mReady;
}
/**
* 一般用在onScroll方法中,參數是字符串,不能為空,會取第一個字符顯示
* @param prevLetter
*/
public void showPrevLetter(String prevLetter) {
if (!mReady) {
return;
}
char firstLetter = prevLetter.charAt(0);
if (!mShowing && firstLetter != mPrevLetter) {
mShowing = true;
mDialogText.setVisibility(View.VISIBLE);
}
//設TextView顯示的字體
mDialogText.setText(((Character) firstLetter).toString());
//移除mRemoveWindow實現的Runnable接口類
mHandler.removeCallbacks(mRemoveWindow);
//添加mRemoveWindow實現的Runnable接口類,并設延時
mHandler.postDelayed(mRemoveWindow, DELAYED_HIDEN);
mPrevLetter = firstLetter;
}
/**
* 實現Runnable接口的類
*/
private final class RemoveWindow implements Runnable {
public void run() {
removeWindow();
}
}
private void removeWindow() {
if (mShowing) {
mShowing = false;
mDialogText.setVisibility(View.INVISIBLE);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:textSize="50sp"
android:textColor="@color/band_common_content"
android:background="@drawable/common_list_title"
android:minWidth="70dip"
android:layout_height="wrap_content"
android:padding="5dip"
android:gravity="center"
/>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

