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

首頁(yè) > 系統(tǒng) > Android > 正文

Android自定義Toast之WindowManager

2019-12-12 00:33:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文為大家分享了Android自定義Toast之WindowManager,供大家參考,具體內(nèi)容如下

Toast:WindowManager

三個(gè)重要的API:

  • public void addView(View view, ViewGroup.LayoutParams params);
  • public void updateViewLayout(View view, ViewGroup.LayoutParams params);

相當(dāng)于布局文件中的屬性

  • public void removeView(View view);

一定要銷(xiāo)毀,否則無(wú)法退出程序。一定要移除,否則報(bào)異常

Toast:WindowManager

  • Toast:setView
  • 自定義Toast:WindowManager 步驟

1) 獲取WindowManager對(duì)象
2)產(chǎn)生WindowManager.LayoutParams(并且設(shè)置參數(shù))
3)產(chǎn)生一個(gè)View
4)顯示:addView(view,mParams);
5) 隱藏:removeView(view);
6) 更新位置一:view:設(shè)置一個(gè)OnTouchListener:ACTION_DONW,ACTION_MOVE,ACTION_UP
7) 更新位置二:updateViewLayout(view,mParams)
8)寫(xiě)成AddressToast


布局文件

 <TextView     android:id="@+id/tv_custom_toast"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="人間仙境"    android:drawableLeft="@drawable/address"    android:gravity="center_vertical"    android:drawablePadding="5dp"    android:padding="10dp"    />

封裝的工具類(lèi)

public class AddressToast {  private WindowManager mWm;  private WindowManager.LayoutParams mParams;  private Context mContext;  private View mV;  public AddressToast(Context context){    this.mContext = context;    // 1 獲取WindowManger 對(duì)象    mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);    // 2 產(chǎn)生LayoutParams    mParams = new WindowManager.LayoutParams();    // 3 設(shè)置相關(guān)參數(shù)    mParams.width=WindowManager.LayoutParams.WRAP_CONTENT;    mParams.height=WindowManager.LayoutParams.WRAP_CONTENT;    mParams.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;    // params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON    // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE    // | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;    mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON         | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;    }  //顯示文本  public void show(String msg){    // 4 產(chǎn)生一個(gè)View    mV = View.inflate(mContext, R.layout.view_toast, null);    // 5 WindowManager:addView(view,params);    mWm.addView(mV, mParams);  }  public void hide() {    if (mV != null) {      if (mV.getParent() != null) {        mWm.removeView(mV);      }      mV = null;    }  }}

調(diào)用工具類(lèi)的邏輯:

public void clickMe2(View v) {    mToast = new AddressToast(this);    mToast.show("好迪真好大家好才是....");  }  public void clickMe3(View v) {    mToast.hide();  }  //onPause()一定要執(zhí)行,否則報(bào)錯(cuò)  @Override  protected void onPause() {    super.onPause();    //remove    if(mV!=null){      if(mV.getParent()!=null){        mWm.removeView(mV);      }      mV=null;    }  }

對(duì)產(chǎn)生的view設(shè)置接觸監(jiān)聽(tīng)事件

剛剛的彈出的window還不能移動(dòng),可設(shè)置接觸添加mv.setOnTouchListener(this)并實(shí)現(xiàn)接口OnTouchListener中的onTouch方法:

@Override  public boolean onTouch(View v, MotionEvent event) {    // getX是獲取以widget左上角為坐標(biāo)原點(diǎn)計(jì)算的X軸坐標(biāo)值    // getRawX 獲取的是以屏幕左上角為坐標(biāo)原點(diǎn)計(jì)算的X軸坐標(biāo)值    int action = event.getAction();    switch (action) {    case MotionEvent.ACTION_DOWN:      // Log.d("example", "ACTION_DOWN");      mDownX = event.getRawX();      mDownY = event.getRawY();      break;    case MotionEvent.ACTION_MOVE:      // Log.d("example", "ACTION_MOVE");      float moveX = event.getRawX();      float moveY = event.getRawY();      // x      int dx = (int) (moveX - mDownX + 0.5f); // 0.5f 四舍五入 (int)4.1 4      int dy = (int) (moveY - mDownY + 0.5f);      Log.d("example", "dx=" + dx);      mParams.x += dx;      mParams.y += dy;      //7.更新位置二      mWm.updateViewLayout(mV, mParams);      // 重新給按下去點(diǎn)賦值      mDownX = moveX;      mDownY = moveY;      break;    case MotionEvent.ACTION_UP:      // Log.d("example", "ACTION_UP");      break;    default:      break;    }    return false;  }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 望江县| 民权县| 铜川市| 普兰店市| 长乐市| 沭阳县| 西乡县| 威海市| 黄平县| 县级市| 如东县| 新化县| 电白县| 云阳县| 晋州市| 山西省| 镇赉县| 全南县| 大洼县| 湾仔区| 上饶县| 昂仁县| 凌海市| 大悟县| 彭山县| 拉萨市| 呼图壁县| 清水河县| 马鞍山市| 合肥市| 九江县| 鄄城县| 平舆县| 巢湖市| 光泽县| 尼勒克县| 盐边县| 盐源县| 巴南区| 休宁县| 溧水县|