欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android自定義Toast之WindowManager

 更新時(shí)間:2018年08月28日 09:02:18   作者:c123sdn123  
這篇文章主要為大家詳細(xì)介紹了Android自定義Toast之WindowManager的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了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);

一定要銷毀,否則無法退出程序。一定要移除,否則報(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)寫成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"
    />

封裝的工具類

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)用工具類的邏輯:

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)聽事件

剛剛的彈出的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;
  }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論