首先自定义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);}}}

  

更多相关文章

  1. android menu自定义菜单 Demo
  2. Android(安卓)系统菜单与自定义菜单
  3. Android腾讯微薄客户端开发十四:首页menu菜单
  4. android Spinner(下拉菜单)的应用举例1---静态实现
  5. 【Android】创建Popwindow弹出菜单的两种方式
  6. Android(安卓)TextView自定义选中弹出菜单记笔记功能
  7. Android-透明状态栏
  8. android Activity实现从底部弹出或滑出选择菜单或窗口
  9. mac上AndroidStudio自带的SDK manager 系统菜单显示问题

随机推荐

  1. AndroidGUI14:各种Dialog常用技巧
  2. android Studio 低版本升级gradle3.0以上
  3. Android Sdcard 可用空间大小
  4. Android中如何使用基于回调的事件处理
  5. android 网络请求图片
  6. Android——CheckBox【复选框】 点击事件
  7. Android、Java单例看这里(常用的单例模式
  8. android 手机获取当前连接的wifi配置信息
  9. Android接口初了解
  10. Android 签名出错