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

首頁 > 系統 > Android > 正文

Android自定義Toast之WindowManager

2019-10-21 21:40:01
字體:
來源:轉載
供稿:網友

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

Toast:WindowManager

三個重要的API:

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

相當于布局文件中的屬性

  • public void removeView(View view);

一定要銷毀,否則無法退出程序。一定要移除,否則報異常

Toast:WindowManager

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

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

Android,Toast,WindowManager

布局文件

 <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 對象    mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);    // 2 產生LayoutParams    mParams = new WindowManager.LayoutParams();    // 3 設置相關參數    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 產生一個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;    }  }}

調用工具類的邏輯:

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

對產生的view設置接觸監聽事件

剛剛的彈出的window還不能移動,可設置接觸添加mv.setOnTouchListener(this)并實現接口OnTouchListener中的onTouch方法:

@Override  public boolean onTouch(View v, MotionEvent event) {    // getX是獲取以widget左上角為坐標原點計算的X軸坐標值    // getRawX 獲取的是以屏幕左上角為坐標原點計算的X軸坐標值    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);      // 重新給按下去點賦值      mDownX = moveX;      mDownY = moveY;      break;    case MotionEvent.ACTION_UP:      // Log.d("example", "ACTION_UP");      break;    default:      break;    }    return false;  }}

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵东县| 武隆县| 江城| 康保县| 英山县| 隆昌县| 天气| 平南县| 清徐县| 武冈市| 桂平市| 隆化县| 桓仁| 九龙城区| 托克托县| 武乡县| 林甸县| 塘沽区| 葫芦岛市| 岢岚县| 余庆县| 正阳县| 芷江| 吉水县| 苗栗县| 峨山| 乌兰浩特市| 宜昌市| 廉江市| 巴中市| 西林县| 梓潼县| 湄潭县| 泰来县| 正定县| 淅川县| 邢台市| 芷江| 巴林左旗| 宿松县| 宿松县|