Android实现桌面悬浮小火箭效果

 更新时间:2020年09月17日 14:35:45   作者:lifeirong  
这篇文章主要为大家详细介绍了Android实现桌面悬浮小火箭效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现悬浮小火箭效果的具体代码,供大家参考,具体内容如下

思路

使用serivce在后台启动小火箭
小火箭使用windowmanager实现。
用ontoch监听实现小火箭的拖拽。

代码实现

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("服务创建。。。。" );
   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,设置帧动画
   ImageView ivRocket = (ImageView) view .findViewById(R.id. rocket);
   ivRocket.setImageResource(R.drawable. rocket );
   AnimationDrawable drawable = (AnimationDrawable) ivRocket.getDrawable();
   drawable.start();
   mWM.addView( view, params);

   // 设置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;

       // 限制窗口坐标不超过屏幕
       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:
       // 手指抬起起,需要发射火箭,限定发射火箭的范围
       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 ;

  // 发射火箭
  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发消息
        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 ;
   }

  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android如何用自定义View实现雪花效果

    Android如何用自定义View实现雪花效果

    这篇文章主要介绍了Android如何用自定义View实现雪花效果,对特效感兴趣的同学可以参考下
    2021-04-04
  • Android实现手机联系人分栏效果

    Android实现手机联系人分栏效果

    这篇文章主要为大家详细介绍了Android实现手机联系人分栏效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android图片性能优化详解

    Android图片性能优化详解

    这篇文章给大家分享了关于Android性能优化之图片优化的相关知识点内容,有兴趣的朋友参考下。
    2018-07-07
  • Android7.0开发实现Launcher3去掉应用抽屉的方法详解

    Android7.0开发实现Launcher3去掉应用抽屉的方法详解

    这篇文章主要介绍了Android7.0开发实现Launcher3去掉应用抽屉的方法,结合实例形式分析了Android7.0 Launcher3调整界面布局的相关操作技巧与注意事项,需要的朋友可以参考下
    2017-11-11
  • Android 重力传感器在游戏开发中的应用

    Android 重力传感器在游戏开发中的应用

    本文主要介绍Android 重力传感器,这里整理了详细的资料,并且详细的说明重力传感器的使用方法,有兴趣的小伙伴可以参考下
    2016-08-08
  • Android使用Flutter实现录音插件

    Android使用Flutter实现录音插件

    这篇文章主要介绍了基于flutter实现录音功能,介绍了如何录音,如何把文件存放到本地,这些都是我们平常使用这个功能会遇到的问题。在使用的过程中遇到的问题也有列出,需要的朋友可以参考下
    2022-08-08
  • Android实现高德地图首页效果(下)

    Android实现高德地图首页效果(下)

    这篇文章主要为大家详细介绍了基于Android实现高德地图首页效果下篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-08-08
  • Android仿淘宝商品拖动查看详情及标题栏渐变功能

    Android仿淘宝商品拖动查看详情及标题栏渐变功能

    这篇文章主要介绍了Android仿淘宝商品拖动查看详情及标题栏渐变功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android SeekBar充当Progress实现兔兔进度条Plus

    Android SeekBar充当Progress实现兔兔进度条Plus

    这篇文章主要为大家介绍了Android SeekBar充当Progress实现兔兔进度条Plus示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Flutter进阶之实现动画效果(十)

    Flutter进阶之实现动画效果(十)

    这篇文章主要为大家详细介绍了Flutter进阶之实现动画效果的第十篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论