Skip to content

Commit

Permalink
修复拖拽回弹类在一些手机无法接收点击事件的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
getActivity committed Nov 7, 2020
1 parent 49485ae commit 183de48
Show file tree
Hide file tree
Showing 9 changed files with 64 additions and 57 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 超级 Toast
# 悬浮窗框架

> 码云地址:[Gitee](https://gitee.com/getActivity/XToast)
Expand All @@ -14,7 +14,8 @@

```groovy
dependencies {
implementation 'com.hjq:xtoast:6.0'
// 悬浮窗框架:https://github.com/getActivity/XToast
implementation 'com.hjq:xtoast:6.2'
}
```

Expand Down Expand Up @@ -65,7 +66,7 @@ new XToast(XToastActivity.this)

#### 作者的其他开源项目

* 安卓架构[AndroidProject](https://github.com/getActivity/AndroidProject)
* 安卓技术中台[AndroidProject](https://github.com/getActivity/AndroidProject)

* 网络框架:[EasyHttp](https://github.com/getActivity/EasyHttp)

Expand Down
Binary file modified XToast.apk
Binary file not shown.
12 changes: 6 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ android {

defaultConfig {
applicationId "com.hjq.xtoast.demo"
minSdkVersion 14
minSdkVersion 16
targetSdkVersion 28
versionCode 60
versionName "6.0"
versionCode 62
versionName "6.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand All @@ -28,11 +28,11 @@ dependencies {
implementation 'com.android.support:design:28.0.0'

// 权限请求框架:https://github.com/getActivity/XXPermissions
implementation 'com.hjq:xxpermissions:8.8'
implementation 'com.hjq:xxpermissions:9.0'
// 标题栏框架:https://github.com/getActivity/TitleBar
implementation 'com.hjq:titlebar:8.0'
implementation 'com.hjq:titlebar:8.2'
// 吐司工具类:https://github.com/getActivity/ToastUtils
implementation 'com.hjq:toast:8.8'
// 内存泄漏捕捉:https://github.com/square/leakcanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
}
17 changes: 9 additions & 8 deletions app/src/main/java/com/hjq/xtoast/demo/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.hjq.xtoast.demo;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
Expand Down Expand Up @@ -33,6 +32,8 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 这里需要先初始化 ToastUtils,实际开发中这句代码应当放在 Application.onCreate 方法中
ToastUtils.init(getApplication());
}

public void show1(View v) {
Expand Down Expand Up @@ -128,7 +129,6 @@ public void show6(View v) {

@Override
public void hasPermission(List<String> granted, boolean all) {

// 传入 Application 表示这个是一个全局的 Toast
new XToast(getApplication())
.setView(R.layout.toast_phone)
Expand All @@ -141,10 +141,11 @@ public void hasPermission(List<String> granted, boolean all) {

@Override
public void onClick(XToast toast, ImageView view) {
ToastUtils.show("我被点击了");
// 点击后跳转到拨打电话界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
toast.startActivity(intent);
// Intent intent = new Intent(Intent.ACTION_DIAL);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// toast.startActivity(intent);
// 安卓 10 在后台跳转 Activity 需要额外适配
// https://developer.android.google.cn/about/versions/10/privacy/changes#background-activity-starts
}
Expand All @@ -165,14 +166,14 @@ public void noPermission(List<String> denied, boolean never) {
}

public void show7(View v) {
// 这里需要先初始化 ToastUtils,实际开发中这句代码应当放在 Application.onCreate 方法中
ToastUtils.init(getApplication());
// 将 ToastUtils 中的 View 转移给 XToast 来显示
new XToast(MainActivity.this)
new XToast(this)
.setDuration(1000)
.setView(ToastUtils.getToast().getView())
.setAnimStyle(android.R.style.Animation_Translucent)
.setText(android.R.id.message, "就问你溜不溜")
.setGravity(Gravity.BOTTOM)
.setYOffset(100)
.show();
}
}
6 changes: 3 additions & 3 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ android {

defaultConfig {
minSdkVersion 14
versionCode 60
versionName "6.0"
versionCode 62
versionName "6.2"
}
}

publish {
userOrg = 'getactivity'
groupId = 'com.hjq'
artifactId = 'xtoast'
version = '6.0'
version = '6.2'
description = 'This is a simple and easy to use suspension window frame'
website = "https://github.com/getActivity/XToast"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
package com.hjq.xtoast;

import java.lang.ref.WeakReference;

/**
* author : Android 轮子哥
* github : https://github.com/getActivity/XToast
* time : 2019/01/04
* desc : Toast 定时销毁任务
*/
final class ToastDismissRunnable extends WeakReference<XToast>
implements Runnable {

ToastDismissRunnable(XToast toast) {
super(toast);
}

@Override
public void run() {
XToast toast = get();
if (toast != null && toast.isShow()) {
toast.cancel();
}
}
package com.hjq.xtoast;

import java.lang.ref.WeakReference;

/**
* author : Android 轮子哥
* github : https://github.com/getActivity/XToast
* time : 2019/01/04
* desc : Toast 定时销毁任务
*/
final class CancelRunnable extends WeakReference<XToast> implements Runnable {

CancelRunnable(XToast toast) {
super(toast);
}

@Override
public void run() {
XToast toast = get();
if (toast != null && toast.isShow()) {
toast.cancel();
}
}
}
4 changes: 2 additions & 2 deletions library/src/main/java/com/hjq/xtoast/XToast.java
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ public X setDuration(int duration) {
if (isShow()) {
if (mDuration != 0) {
removeCallbacks();
postDelayed(new ToastDismissRunnable(this), mDuration);
postDelayed(new CancelRunnable(this), mDuration);
}
}
return (X) this;
Expand Down Expand Up @@ -390,7 +390,7 @@ public X show() {
mShow = true;
// 如果当前限定了显示时长
if (mDuration != 0) {
postDelayed(new ToastDismissRunnable(this), mDuration);
postDelayed(new CancelRunnable(this), mDuration);
}
// 如果设置了拖拽规则
if (mDraggable != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ protected int getStatusBarHeight() {
return frame.top;
}

/**
* 更新悬浮窗的位置
*
* @param x x 坐标
* @param y y 坐标
*/
protected void updateLocation(float x, float y) {
updateLocation((int) x, (int) y);
}
Expand Down Expand Up @@ -90,6 +96,6 @@ protected void updateLocation(int x, int y) {
* @param upY 手指抬起时的 y 坐标
*/
protected boolean isTouchMove(float downX, float upX, float downY, float upY) {
return downX != upX || downY != upY;
return ((int) downX) != ((int) upX) || ((int) (downY)) != ((int) upY);
}
}
20 changes: 10 additions & 10 deletions library/src/main/java/com/hjq/xtoast/draggable/SpringDraggable.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,33 @@ public class SpringDraggable extends BaseDraggable {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
int rawMoveX;
int rawMoveY;
float rawMoveX;
float rawMoveY;

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录按下的位置(相对 View 的坐标)
mViewDownX = (int) event.getX();
mViewDownY = (int) event.getY();
mViewDownX = event.getX();
mViewDownY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
// 记录移动的位置(相对屏幕的坐标)
rawMoveX = (int) event.getRawX();
rawMoveY = (int) (event.getRawY() - getStatusBarHeight());
rawMoveX = event.getRawX();
rawMoveY = event.getRawY() - getStatusBarHeight();
// 更新移动的位置
updateLocation(rawMoveX - mViewDownX, rawMoveY - mViewDownY);
break;
case MotionEvent.ACTION_UP:
// 记录移动的位置(相对屏幕的坐标)
rawMoveX = (int) event.getRawX();
rawMoveY = (int) (event.getRawY() - getStatusBarHeight());
rawMoveX = event.getRawX();
rawMoveY = event.getRawY() - getStatusBarHeight();
// 获取当前屏幕的宽度
int screenWidth = getScreenWidth();
// 自动回弹吸附
final float rawFinalX;
if (rawMoveX < screenWidth / 2) {
if (rawMoveX < screenWidth / 2f) {
// 回弹到屏幕左边
rawFinalX = 0;
rawFinalX = 0f;
} else {
// 回弹到屏幕右边
rawFinalX = screenWidth;
Expand Down

0 comments on commit 183de48

Please sign in to comment.