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

Android實(shí)現(xiàn)桌面懸浮小火箭效果

 更新時間:2020年09月17日 14:35:45   作者:lifeirong  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)桌面懸浮小火箭效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)懸浮小火箭效果的具體代碼,供大家參考,具體內(nèi)容如下

思路

使用serivce在后臺啟動小火箭
小火箭使用windowmanager實(shí)現(xiàn)。
用ontoch監(jiān)聽實(shí)現(xiàn)小火箭的拖拽。

代碼實(shí)現(xiàn)

public class RocketService extends Service {

  private WindowManager mWM;
  private View view;
  private int startX ;
  private int startY ;
  private LayoutParams params;

  @Override
  public IBinder onBind(Intent intent) {
   return null ;
  }

  @Override
  public void onCreate() {
   super .onCreate();
   System. out .println("服務(wù)創(chuàng)建。。。。" );
   mWM = (WindowManager) getSystemService(WINDOW_SERVICE );
   winWidth = mWM.getDefaultDisplay(). getWidth();
   winHeight = mWM .getDefaultDisplay().getHeight ();

   params = new WindowManager.LayoutParams();
   params. height = WindowManager.LayoutParams.WRAP_CONTENT ;
   params. width = WindowManager.LayoutParams.WRAP_CONTENT ;
   params. flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
     | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE ;
   params. format = PixelFormat. TRANSLUCENT ;
   params. type = WindowManager.LayoutParams.TYPE_PHONE ;
   params. gravity = Gravity. LEFT + Gravity. TOP;

   view = LayoutInflater.from( this).inflate(R.layout. rocket , null );
   //拿到 imageview,設(shè)置幀動畫
   ImageView ivRocket = (ImageView) view .findViewById(R.id. rocket);
   ivRocket.setImageResource(R.drawable. rocket );
   AnimationDrawable drawable = (AnimationDrawable) ivRocket.getDrawable();
   drawable.start();
   mWM.addView( view, params);

   // 設(shè)置view的觸摸事件,讓它可以被拖拽
   view.setOnTouchListener( new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
     switch (event.getAction()) {
     case MotionEvent. ACTION_DOWN:
       startX = ( int ) event.getRawX();
       startY = ( int ) event.getRawY();
       break ;
     case MotionEvent. ACTION_MOVE:
       int dx = (int ) (event.getRawX() - startX );
       int dy = (int ) (event.getRawY() - startY );
       // 更新浮窗位置
       params. x += dx;
       params. y += dy;

       // 限制窗口坐標(biāo)不超過屏幕
       if (params .x < 0) {
        params. x = 0;
      }

       if (params .x > winWidth - view .getWidth()) {
        params. x = winWidth - view .getWidth();
      }

       if (params .y < 0) {
        params. y = 0;
      }

       if (params .y > winHeight - view .getHeight()) {
        params. y = winHeight - view .getHeight();
      }

       mWM.updateViewLayout( view, params );
       startX = ( int ) event.getRawX();
       startY = ( int ) event.getRawY();
       break ;
     case MotionEvent. ACTION_UP:
       // 手指抬起起,需要發(fā)射火箭,限定發(fā)射火箭的范圍
       if (params .x > 0 && params. x < winWidth
         && params. y > winHeight - 500) {
        sendRocket();
      }
       break ;
     }

     return true ;// 不再把事件傳遞給onClick處理
    }

   });
  }

  private Handler mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
     int y = msg.arg1 ;
     params. y = y;
     mWM.updateViewLayout( view, params);
   }
  };
  private int winWidth ;
  private int winHeight ;

  // 發(fā)射火箭
  private void sendRocket() {
   // 用子線程更新y軸
   new Thread(new Runnable() {

    @Override
    public void run() {
     int pos = 1000;
     for (int i=0; i <= 10; i++) {
        int y = pos-100*i;
        //休眠100ms發(fā)消息
        try {
         Thread. sleep(100);
        } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }

        Message msg = Message.obtain();
        msg. arg1 = y;
        mHandler.sendMessage(msg);
     }
    }
   }).start();
  }

  @Override
  public void onDestroy() {
   // TODO Auto-generated method stub
   super .onDestroy();
   if (mWM != null && view != null) {
    mWM.removeView( view);
    view = null ;
   }

  }
}

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

相關(guān)文章

  • Android Fragment使用全解

    Android Fragment使用全解

    這篇文章主要介紹了Android Fragment使用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • 給Android初學(xué)者的Gradle知識普及

    給Android初學(xué)者的Gradle知識普及

    剛學(xué) Android 不久,對 Gradle 不懂,看了很多資料依然一知半解,很多人都這樣覺得,表示同感,下面小編來給大家講講 Gradle相關(guān)知識,需要的朋友跟隨小編一起來學(xué)習(xí)一下
    2018-09-09
  • Android仿微信實(shí)現(xiàn)評論功能

    Android仿微信實(shí)現(xiàn)評論功能

    這篇文章主要為大家詳細(xì)介紹了Android仿微信實(shí)現(xiàn)評論功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Input系統(tǒng)之InputReader處理合成事件詳解

    Input系統(tǒng)之InputReader處理合成事件詳解

    這篇文章主要為大家介紹了Input系統(tǒng)之InputReader處理合成事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android 開發(fā)延時調(diào)用的幾種方法

    Android 開發(fā)延時調(diào)用的幾種方法

    本篇文章主要介紹Android 延遲, 在Android 程序開發(fā)過程中經(jīng)常會遇到程序推遲時間執(zhí)行,這里整理了幾種方法,以便Android 開發(fā)的朋友參考
    2016-07-07
  • Android中Xposed框架篇---修改系統(tǒng)位置信息實(shí)現(xiàn)自身隱藏功能實(shí)例

    Android中Xposed框架篇---修改系統(tǒng)位置信息實(shí)現(xiàn)自身隱藏功能實(shí)例

    本篇文章介紹了Android中Xposed框架的使用,詳細(xì)的介紹了修改系統(tǒng)位置信息實(shí)現(xiàn)自身隱藏功能實(shí)例,有需要的朋友可以了解一下。
    2016-11-11
  • Android?創(chuàng)建AIDL文件使用教程

    Android?創(chuàng)建AIDL文件使用教程

    這篇文章主要介紹了Android創(chuàng)建AIDL文件使用教程,AIDL是一種IDL語言,用于生成可以在Android設(shè)備上兩個進(jìn)程之間進(jìn)行進(jìn)程間通信的代碼
    2022-07-07
  • Android畫畫板的制作方法

    Android畫畫板的制作方法

    這篇文章主要為大家詳細(xì)介紹了Android畫畫板的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android實(shí)現(xiàn)手機(jī)震動抖動效果的方法

    Android實(shí)現(xiàn)手機(jī)震動抖動效果的方法

    今天小編就為大家分享一篇關(guān)于Android實(shí)現(xiàn)手機(jī)震動抖動效果的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • App內(nèi)切換語言詳解

    App內(nèi)切換語言詳解

    本篇文章主要介紹了App內(nèi)切換語言的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04

最新評論