首先自定义FloatsWindowView,用于显示动画小人。

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.view.WindowManager;
import android.widget.Toast;@SuppressLint("ClickableViewAccessibility")
public class FloatsWindowView extends View {private Context mContext = null;private WindowManager mWindowMgr = null;private WindowManager.LayoutParams mWindowMgrParams = null;private AnimationDrawable mAnimationDrawable = null;private int iPosX = 0;private int iPosY = 0;private int iLastPosX = 0;private int iLastPosY = 0;private boolean bMoved = false;public FloatsWindowView(Context context) {this(context, null, 0);}public FloatsWindowView(Context context, AttributeSet attrs) {this(context, attrs, 0);}@SuppressWarnings("deprecation")public FloatsWindowView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mContext = context;mWindowMgr = (WindowManager) getContext().getApplicationContext().getSystemService("window");mWindowMgrParams = new WindowManager.LayoutParams();initParams();mAnimationDrawable = new AnimationDrawable();for (int i = 0; i < 4; i++) {int id = getResources().getIdentifier("a" + i, "drawable",mContext.getPackageName());mAnimationDrawable.addFrame(getResources().getDrawable(id), 100);}mAnimationDrawable.setOneShot(false);this.setBackgroundDrawable(mAnimationDrawable);OnPreDrawListener listener = new OnPreDrawListener() {@Overridepublic boolean onPreDraw() {mAnimationDrawable.start();return true;}};this.getViewTreeObserver().addOnPreDrawListener(listener);}private void initParams() {DisplayMetrics dm = getResources().getDisplayMetrics();mWindowMgrParams.x = dm.widthPixels - 136;mWindowMgrParams.y = 300;mWindowMgrParams.width = 136;mWindowMgrParams.height = 136;}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:iPosX = (int) event.getX();iPosY = (int) event.getY();bMoved = false;break;case MotionEvent.ACTION_MOVE:bMoved = true;iLastPosX = (int) event.getX();iLastPosY = (int) event.getY();updatePostion(iLastPosX - iPosX, iLastPosY - iPosY);break;case MotionEvent.ACTION_UP:if (!bMoved) {Intent it = new Intent(mContext, MainActivity.class);mContext.startActivity(it);}break;default:break;}if (event.getAction() == MotionEvent.ACTION_MOVE) {getParent().requestDisallowInterceptTouchEvent(true);}if (event.getAction() == MotionEvent.ACTION_UP) {if ((iPosX == iLastPosX) && (iPosY == iLastPosY)) {singleClick();return true;}}return true;}private void updatePostion(int x, int y) {mWindowMgrParams.type = 2003;mWindowMgrParams.format = 1;mWindowMgrParams.flags = 40;mWindowMgrParams.gravity = Gravity.LEFT | Gravity.TOP;mWindowMgrParams.x += x;mWindowMgrParams.y += y;mWindowMgr.updateViewLayout(this, mWindowMgrParams);}public void singleClick() {Toast.makeText(mContext, "点击了阿狸,哇咔咔咔", Toast.LENGTH_SHORT).show();}
}

  

然后在Activity中添加自定义小人,即可,可以处理小人的点击逻辑,滑动逻辑。

import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.WindowManager;
import android.app.Activity;
import android.content.Context;public class MainActivity extends Activity {private static WindowManager mWindowMgr = null;private WindowManager.LayoutParams mWindowMgrParams = null;private static FloatsWindowView mFloatsWindowView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onStop() {super.onStop();}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {getWindowLayout();}private void initParams() {DisplayMetrics dm = getResources().getDisplayMetrics();mWindowMgrParams.x = dm.widthPixels - 136;mWindowMgrParams.y = 300;mWindowMgrParams.width = 136;mWindowMgrParams.height = 136;}private void getWindowLayout() {if (mFloatsWindowView == null) {mWindowMgr = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE);mWindowMgrParams = new WindowManager.LayoutParams();/** 2003 在指悬浮在所有界面之上 (4.0+系统中,在下拉菜单下面,而在2.3中,在上拉菜单之上)*/mWindowMgrParams.type = 2003;mWindowMgrParams.format = 1;/** 代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;* 40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)*/mWindowMgrParams.flags = 40;mWindowMgrParams.gravity = Gravity.LEFT | Gravity.TOP;initParams();mFloatsWindowView = new FloatsWindowView(this);mWindowMgr.addView(mFloatsWindowView, mWindowMgrParams);}}}

  

Android 仿360桌面小人相关推荐

  1. android 小人,Android 仿360桌面小人

    首先自定义FloatsWindowView,用于显示动画小人. import android.annotation.SuppressLint; import android.content.Conte ...

  2. android仿照360壁纸照片显示特效,Android仿360桌面手机卫士悬浮窗效果

    大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我先说几句不相干的话. 不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多 ...

  3. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示

    [android]仿360状态,类流量监控桌面浮动显示 前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮动的桌面提示,想不到怎么实现.然后查了些资料大致了解了下,比想象的简单多了.先看效 ...

  4. android 仿360浮动,Android仿360悬浮小球自定义view实现示例

    Android仿360悬浮小球自定义view实现示例 效果图如下: 实现当前这种类似的效果 和360小球 悬浮桌面差不错类似.这种效果是如何实现的呢.废话不多说 ,直接上代码. 1.新建工程,添加悬浮 ...

  5. android悬浮球代码,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  6. android 悬浮球动画,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  7. 仿360桌面弹拉换壁纸接环动画效果

    先看张效果图 技术实现思路是继承一个View类,重载onDraw方法,在里面画一条线和圆环,重点是画的位置,那种曲线是利用Path做的,然后起一个线程去更新位置就好了,仔细观察了360桌面的效果,感觉 ...

  8. android 全局浮动球,Android仿360悬浮小球自定义view实现

    图片.png 图片.png 实现当前这种类似的效果 (360小球 悬浮桌面差不错类似).第一次接触到的童鞋就像我一样懵逼(研究过得童鞋,就知道,实现这种悬浮窗体,是需要添加悬浮窗 设置权限的,我会在下 ...

  9. android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件

    简介 灵感源自360手机卫,主要功能就是实现显示评分或等级的效果.并稍微改良了一下,有更好的实用性和扩展性. 因为主要用途就是显示"分数","评价",所以暂且叫 ...

最新文章

  1. php yield 递归,递归运行所有yield请求h的废弃输出文件
  2. LeetCode5377. 将二进制表示减到1的步骤数
  3. was修改类加载模式_java基础——单例(Singleton)模式介绍
  4. OpenCV显示图片的实例(附完整代码)
  5. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
  6. Linux: I/O多路转接之poll(有图有代码有真相!!!)
  7. Java 数据库进度条_java进度条
  8. java rsaprivatekey_用ssh-keygen生成的公钥和私钥如何在java中转为RSAPublicKey和RSAPrivateKey...
  9. Acrobat Pro DC 教程,如何在 PDF 中添加和组织页面?
  10. getParameter和getAttribute区别(超详细分析)
  11. yolo3加载自己训练的模型出现NameError: name 'yolo_head' is not defined
  12. java实现简单泡泡屏保动画及点击变实心泡泡
  13. 社会人类学类毕业论文文献包含哪些?
  14. 网络编程中,同步传输和异步传输有什么区别
  15. Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示
  16. 视频教程-10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码)-微信开发
  17. Airspace smoothing
  18. eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)
  19. python常用的案例
  20. 冯 诺依曼与计算机的故事,计算机之父冯·诺依曼的故事

热门文章

  1. mysql php 时间比较大小_MySql中时间比较的实现
  2. MySQL基础_模糊查询—between and in is null <=>(安全等于)等关建字
  3. @Resource kdown
  4. iis设置首页为main.html,遇到X-Frame-Options头未设置"怎么解决
  5. java编写数字时钟_用JAVA写数字时钟
  6. python设置字符编码_python字符编码问题一则
  7. Docker新手入门,最全详解看这里!
  8. python中的zip函数详解_python中的 zip函数详解
  9. 系统学习机器学习之距离的度量(二)--DTW
  10. cypress离线安装_【拆一个高端货】 美国NI公司 GPIB-USB转接卡 长标题