仿iPhone的AssistiveTouch 悬浮辅助球工具(2)

MainActivity.java:

package com.tyd.floatball.ui;

import com.tyd.floatball.R;
import com.tyd.floatball.R.layout;
import com.tyd.floatball.service.TopFloatService;
import Android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent service = new Intent();
  service.setClass(this, TopFloatService.class);
  //启动服务
  startService(service);
    }
}

TopFloatService.java:

package com.tyd.floatball.service;

import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.IBinder;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.tyd.floatball.R;
import com.tyd.floatball.util.MyApplication;

public class TopFloatService extends Service implements OnClickListener,OnKeyListener{
 WindowManager wm = null;
 WindowManager.LayoutParams ballWmParams = null;
 private View ballView;
 private View menuView;
 private float mTouchStartX;
 private float mTouchStartY;
 private float x;
 private float y;
 private RelativeLayout menuLayout;
 private Button floatImage;
 private PopupWindow pop;
 private RelativeLayout menuTop;
 private boolean ismoving = false;
 
 @Override
 public void onCreate() {
  super.onCreate();
  //加载辅助球布局
  ballView = LayoutInflater.from(this).inflate(R.layout.floatball, null);
  floatImage = (Button)ballView.findViewById(R.id.float_image);
  setUpFloatMenuView();
  createView();
 }
 
 /**
  * 窗口菜单初始化
  */
 private void setUpFloatMenuView(){
  menuView = LayoutInflater.from(this).inflate(R.layout.floatmenu, null);
  menuLayout = (RelativeLayout)menuView.findViewById(R.id.menu);
  menuTop = (RelativeLayout)menuView.findViewById(R.id.lay_main);
  menuLayout.setOnClickListener(this);
  menuLayout.setOnKeyListener(this);
  menuTop.setOnClickListener(this);
 }

/**
  * 通过MyApplication创建view,并初始化显示参数
  */
 private void createView() {
  wm = (WindowManager) getApplicationContext().getSystemService("window");
  ballWmParams =  ((MyApplication) getApplication()).getMywmParams();
  ballWmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
  ballWmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
  ballWmParams.gravity = Gravity.LEFT | Gravity.TOP;
  ballWmParams.x = 0;
  ballWmParams.y = 0;
  ballWmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
  ballWmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
  ballWmParams.format = PixelFormat.RGBA_8888;
  //添加显示层
  wm.addView(ballView, ballWmParams);
  //注册触碰事件监听器
  floatImage.setOnTouchListener(new OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {
    x = event.getRawX();
    y = event.getRawY();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
     ismoving = false;
     mTouchStartX = (int)event.getX();
     mTouchStartY = (int)event.getY();
     break;
    case MotionEvent.ACTION_MOVE:
     ismoving = true;
     updateViewPosition();
     break;
    case MotionEvent.ACTION_UP:
     mTouchStartX = mTouchStartY = 0;
     break;
    }
    //如果拖动则返回false,否则返回true
    if(ismoving == false){
     return false;
    }else{
     return true;
    }
   }

});
  //注册点击事件监听器
  floatImage.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    DisplayMetrics dm = getResources().getDisplayMetrics();
    pop = new PopupWindow(menuView, dm.widthPixels, dm.heightPixels);
    pop.showAtLocation(ballView, Gravity.CENTER, 0, 0);
    pop.update();
   }
  });
 }
 
 /**
  * 更新view的显示位置
  */
 private void updateViewPosition() {
  ballWmParams.x = (int) (x - mTouchStartX);
  ballWmParams.y = (int) (y - mTouchStartY);
  wm.updateViewLayout(ballView, ballWmParams);
 }

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

@Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.lay_main:
   Toast.makeText(getApplicationContext(), "111", 1000).show();
   break;

default:
   if(pop!=null && pop.isShowing()){
    pop.dismiss();
   }
   break;
  }
 
 }

@Override
 public boolean onKey(View v, int keyCode, KeyEvent event) {
  Toast.makeText(getApplicationContext(), "keyCode:"+keyCode, 1000).show();
  switch (keyCode) {
  case KeyEvent.KEYCODE_HOME:
   pop.dismiss();
   break;
  default:
   break;
  }
  return true;
 }
 
}

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d94740d8bf083cb8bed78cebbe080671.html