package com.ice.floatingball;
import android.content.Context;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import org.greenrobot.eventbus.EventBus;
/**
* Created by asd on 1/1/2017.
*/
public class ViewManager {
FloatingView floatBall;
WindowManager windowManager;
public static ViewManager manager;
Context context;
private WindowManager.LayoutParams floatBallParams;
private ViewManager(Context context) {
this.context = context;
}
public static ViewManager getInstance(Context context) {
if (manager == null) {
manager = new ViewManager(context);
}
return manager;
}
public void showFloatBall() {
floatBall = new FloatingView(context);
windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
if (floatBallParams == null) {
floatBallParams = new WindowManager.LayoutParams();
floatBallParams.width = floatBall.width;
floatBallParams.height = floatBall.height;
floatBallParams.gravity = Gravity.TOP | Gravity.LEFT;
floatBallParams.type = WindowManager.LayoutParams.TYPE_TOAST;
floatBallParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
floatBallParams.format = PixelFormat.RGBA_8888;
}
windowManager.addView(floatBall, floatBallParams);
floatBall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(MyAccessibilityService.BACK);
Toast.makeText(context, "点击了悬浮球 执行后退操作", Toast.LENGTH_SHORT).show();
}
});
floatBall.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
EventBus.getDefault().post(MyAccessibilityService.HOME);
Toast.makeText(context, "长按了悬浮球 执行返回桌面", Toast.LENGTH_SHORT).show();
return false;
}
});
floatBall.setOnTouchListener(new View.OnTouchListener() {
float startX;
float startY;
float tempX;
float tempY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getRawX();
startY = event.getRawY();
tempX = event.getRawX();
tempY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float dx = event.getRawX() - startX;
float dy = event.getRawY() - startY;
//计算偏移量,刷新视图
floatBallParams.x += dx;
floatBallParams.y += dy;
windowManager.updateViewLayout(floatBall, floatBallParams);
startX = event.getRawX();
startY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
//判断松手时View的横坐标是靠近屏幕哪一侧,将View移动到依靠屏幕
float endX = event.getRawX();
float endY = event.getRawY();
if (endX < getScreenWidth() / 2) {
endX = 0;
} else {
endX = getScreenWidth() - floatBall.width;
}
floatBallParams.x = (int) endX;
windowManager.updateViewLayout(floatBall, floatBallParams);
//如果初始落点与松手落点的坐标差值超过6个像素,则拦截该点击事件
//否则继续传递,将事件交给OnClickListener函数处理
if (Math.abs(endX - tempX) > 6 && Math.abs(endY - tempY) > 6) {
return true;
}
break;
}
return false;
}
});
}
public int getScreenWidth() {
return windowManager.getDefaultDisplay().getWidth();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android悬浮球项目代码分享;
共40个文件
xml:15个
java:6个
png:5个
需积分: 21 8 下载量 5 浏览量
2019-12-27
14:26:40
上传
评论
收藏 90KB RAR 举报
温馨提示
android悬浮球项目代码分享;辅助功能
资源推荐
资源详情
资源评论
收起资源包目录
FloatingBall_jb51.rar (40个子文件)
FloatingBall_jb51
.gitignore 118B
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
build.gradle 498B
gradlew.bat 2KB
gradlew 5KB
app
.gitignore 7B
build.gradle 913B
proguard-rules.pro 654B
src
test
java
com
ice
floatingball
ExampleUnitTest.java 398B
main
AndroidManifest.xml 1KB
java
com
ice
floatingball
MyAccessibilityService.java 1KB
FloatingView.java 1KB
MainActivity.java 1KB
ViewManager.java 5KB
res
values
styles.xml 383B
colors.xml 255B
strings.xml 144B
dimens.xml 211B
mipmap-xxhdpi
ic_launcher.png 8KB
layout
activity_main.xml 1KB
xml
accessibilityservice.xml 757B
mipmap-xhdpi
ic_launcher.png 5KB
mipmap-hdpi
ic_launcher.png 3KB
mipmap-mdpi
ic_launcher.png 2KB
values-w820dp
dimens.xml 358B
mipmap-xxxhdpi
ic_launcher.png 10KB
androidTest
java
com
ice
floatingball
ExampleInstrumentedTest.java 744B
gradle.properties 730B
.idea
runConfigurations.xml 564B
encodings.xml 159B
misc.xml 2KB
modules.xml 361B
copyright
profiles_settings.xml 74B
compiler.xml 686B
gradle.xml 626B
领取天猫淘宝内部优惠券.url.url 117B
去脚本之家看看.url 124B
settings.gradle 15B
服务器软件.url 112B
共 40 条
- 1
资源评论
AI测评社
- 粉丝: 24
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功