国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android PopupWindow增加半透明蒙層

2019-10-21 21:36:50
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android PopupWindow增加半透明蒙層的具體代碼,供大家參考,具體內容如下

先看效果圖:

Android,PopupWindow,半透明蒙層

實現代碼:

BasePopupWindowWithMask.class

package com.example.popupwindowwithmask; import android.content.Context;import android.graphics.PixelFormat;import android.graphics.drawable.ColorDrawable;import android.os.IBinder;import android.view.KeyEvent;import android.view.View;import android.view.WindowManager;import android.widget.PopupWindow; /** * Created by kk on 2017/7/22. */ public abstract class BasePopupWindowWithMask extends PopupWindow { protected Context context; private WindowManager windowManager; private View maskView;  public BasePopupWindowWithMask(Context context) {  super(context);  this.context = context;  windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  setContentView(initContentView());  setHeight(initHeight());  setWidth(initWidth());  setOutsideTouchable(true);  setFocusable(true);  setTouchable(true);  setBackgroundDrawable(new ColorDrawable()); }  protected abstract View initContentView();  protected abstract int initHeight();  protected abstract int initWidth();  @Override public void showAsDropDown(View anchor) {  addMask(anchor.getWindowToken());  super.showAsDropDown(anchor); }  private void addMask(IBinder token) {  WindowManager.LayoutParams wl = new WindowManager.LayoutParams();  wl.width = WindowManager.LayoutParams.MATCH_PARENT;  wl.height = WindowManager.LayoutParams.MATCH_PARENT;  wl.format = PixelFormat.TRANSLUCENT;//不設置這個彈出框的透明遮罩顯示為黑色  wl.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;//該Type描述的是形成的窗口的層級關系  wl.token = token;//獲取當前Activity中的View中的token,來依附Activity  maskView = new View(context);  maskView.setBackgroundColor(0x7f000000);  maskView.setFitsSystemWindows(false);  maskView.setOnKeyListener(new View.OnKeyListener() {   @Override   public boolean onKey(View v, int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {     removeMask();     return true;    }    return false;   }  });  /**   * 通過WindowManager的addView方法創建View,產生出來的View根據WindowManager.LayoutParams屬性不同,效果也就不同了。   * 比如創建系統頂級窗口,實現懸浮窗口效果!   */  windowManager.addView(maskView, wl); }  private void removeMask() {  if (null != maskView) {   windowManager.removeViewImmediate(maskView);   maskView = null;  } }  @Override public void dismiss() {  removeMask();  super.dismiss(); }}

TestPopupWindow.class

package com.example.popupwindowwithmask; import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.WindowManager; /** * Created by kk on 2017/7/22. */ public class TestPopupWindow extends BasePopupWindowWithMask { private int[] mIds; private View contentView; private OnItemClickListener listener;  public interface OnItemClickListener {  void OnItemClick(View v); }  public void setOnItemClickListener(OnItemClickListener listener) {  this.listener = listener; }  public TestPopupWindow(Context context, int[] mIds) {  super(context);  this.mIds = mIds;   initListener(); }  @Override protected View initContentView() {  contentView = LayoutInflater.from(context).inflate(R.layout.pop_layout, null, false);  return contentView; }  private void initListener() {  for (int i = 0; i < mIds.length; i++) {   contentView.findViewById(mIds[i]).setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {     if (null != listener) {      listener.OnItemClick(v);     }     dismiss();    }   });  } } @Override protected int initHeight() {  return WindowManager.LayoutParams.WRAP_CONTENT; } @Override protected int initWidth() {  return (int) (0.5 * UIUtils.getScreenWidth(context)); }}

MainActivity.class

package com.example.popupwindowwithmask; import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import android.widget.Toast; public class MainActivity extends AppCompatActivity { private TextView textView;  @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  textView = (TextView) findViewById(R.id.tv_popup);    final TestPopupWindow testPopupWindow = new TestPopupWindow(this, new int[]{R.id.pop_location, R.id.pop_group, R.id.pop_list});   textView.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    testPopupWindow.showAsDropDown(textView);   }  });   testPopupWindow.setOnItemClickListener(new TestPopupWindow.OnItemClickListener() {   @Override   public void OnItemClick(View v) {    switch (v.getId()) {     case R.id.pop_location:      Toast.makeText(MainActivity.this, "地址", Toast.LENGTH_SHORT).show();      break;     case R.id.pop_group:      Toast.makeText(MainActivity.this, "分組", Toast.LENGTH_SHORT).show();      break;     case R.id.pop_list:      Toast.makeText(MainActivity.this, "清單", Toast.LENGTH_SHORT).show();      break;    }   }  }); }}

pop_layout.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content">  <RelativeLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content">   <RelativeLayout   android:id="@+id/rl_indicator"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:gravity="center_horizontal">    <ImageView    android:layout_width="wrap_content"    android:layout_height="12dp"    android:scaleType="fitCenter"    android:src="@drawable/filter_arrow_up" />  </RelativeLayout>   <LinearLayout   android:layout_width="wrap_content"   android:layout_height="150dp"   android:layout_below="@+id/rl_indicator"   android:background="@drawable/pop_background"   android:gravity="center_horizontal"   android:orientation="vertical"   android:paddingLeft="15dp"   android:paddingRight="15dp">    <TextView    android:id="@+id/pop_location"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    android:drawableLeft="@mipmap/fault_equipment_location_icon"    android:drawablePadding="12dp"    android:gravity="center_vertical"    android:text="地址"    android:textColor="#000"    android:textSize="16sp" />    <View    android:layout_width="match_parent"    android:layout_height="0.3dp"    android:background="#D2D2D2" />    <TextView    android:id="@+id/pop_group"    android:layout_width="match_parent"    android:layout_height="0dp"     android:layout_weight="1"    android:drawableLeft="@mipmap/fault_equipment_grouping_icon"    android:drawablePadding="12dp"    android:gravity="center_vertical"    android:text="分組"    android:textColor="#000"    android:textSize="16sp" />    <View    android:layout_width="match_parent"    android:layout_height="0.3dp"    android:background="#D2D2D2" />    <TextView    android:id="@+id/pop_list"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    android:drawableLeft="@mipmap/fault_equipment_list_icon"    android:drawablePadding="12dp"    android:gravity="center_vertical"    android:text="清單"    android:textColor="#000"    android:textSize="16sp" />   </LinearLayout> </RelativeLayout></RelativeLayout>

pop_background.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffff" /> <corners  android:radius="5dp" /></shape>

UIUtils.class

package com.example.popupwindowwithmask; import android.content.Context; /** * Created by kk on 2017/7/22. */ public class UIUtils { /**  * 獲得屏幕寬度  *  * @param context  * @return  */ public static int getScreenWidth(Context context) {  return context.getResources().getDisplayMetrics().widthPixels; }  /**  * 獲得屏幕高度  *  * @param context  * @return  */ public static int getScreenHeight(Context context) {  return context.getResources().getDisplayMetrics().heightPixels; } }

源碼:下載地址

參考資料:

鏈接1

鏈接2

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娄烦县| 新疆| 临沂市| 库伦旗| 佛学| 巫溪县| 瓮安县| 江城| 瓦房店市| 辽宁省| 龙陵县| 海伦市| 大洼县| 台山市| 剑河县| 东乡| 北川| 庆城县| 微博| 晋州市| 佛山市| 织金县| 南漳县| 长宁区| 清河县| 静宁县| 成武县| 清苑县| 八宿县| 嫩江县| 衡阳县| 淅川县| 图们市| 商洛市| 武义县| 大丰市| 涞源县| 淅川县| 阿坝| 清原| 吉林市|