当前位置: 首页 > wzjs >正文

网站设计的公司蒙特电商网站入口

网站设计的公司蒙特,电商网站入口,成都市微信网站建,做公司月刊网站在Android13中,有这么一个bug,写一个可以拖到的悬浮窗,这个悬浮窗里有TextView,在拖到某个位置后,再调用TextView的setText方法,会发现出现了一个窗口动画,悬浮窗跳到了起始位置,从开…

在Android13中,有这么一个bug,写一个可以拖到的悬浮窗,这个悬浮窗里有TextView,在拖到某个位置后,再调用TextView的setText方法,会发现出现了一个窗口动画,悬浮窗跳到了起始位置,从开始的位置又滑动到当前位置,看起来就是出现了一个跳动。

试验例子

package com.example.testfloatview;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;public class FloatWindowService extends Service {private WindowManager windowManager;private View floatView;private TextView textView;// 记录手指按下时的初始位置private int initialX, initialY;// 记录悬浮窗的初始位置private int initialWindowX, initialWindowY;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();// 初始化 WindowManagerwindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);// 加载布局文件LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);floatView = inflater.inflate(R.layout.float_window_layout, null);// 获取TextView控件textView = floatView.findViewById(R.id.text_view);// 设置初始文本textView.setText("hello, this is a test");// 创建 WindowManager.LayoutParamsWindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT);// 设置悬浮窗位置params.gravity = Gravity.TOP | Gravity.START;params.x = 0;params.y = 100;params.windowAnimations = 0;// 添加悬浮窗到窗口管理器windowManager.addView(floatView, params);// 设置触摸事件监听器floatView.setOnTouchListener(new View.OnTouchListener() {private int initialTouchX, initialTouchY;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 记录初始位置initialX = params.x;initialY = params.y;initialTouchX = (int) event.getRawX();initialTouchY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:// 计算新的位置params.x = initialX + (int) (event.getRawX() - initialTouchX);params.y = initialY + (int) (event.getRawY() - initialTouchY);// 更新悬浮窗位置windowManager.updateViewLayout(floatView, params);break;case MotionEvent.ACTION_UP:floatView.invalidate();textView.setText("hello");//       textView.setText("hello, this is a test");break;default:break;}return true; // 消费触摸事件}});// 使用Handler延迟5秒后更新文本new Handler().postDelayed(() -> {//     textView.setText("hello world");//     textView.setText("hello, this is a tttt");textView.setText("hello");}, 5000);}@Overridepublic void onDestroy() {super.onDestroy();// 移除悬浮窗if (floatView != null && windowManager != null) {windowManager.removeView(floatView);}}
}

package com.example.testfloatview;import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 检查是否已经有悬浮窗权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (!Settings.canDrawOverlays(MainActivity.this)) {// 如果没有权限,跳转到系统设置页面申请权限Toast.makeText(MainActivity.this, "需要悬浮窗权限!", Toast.LENGTH_SHORT).show();Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName()));startActivityForResult(intent, 1);} else {// 已经有权限,启动悬浮窗服务startService(new Intent(MainActivity.this, FloatWindowService.class));finish(); // 关闭主Activity}} else {// 启动悬浮窗服务(低版本设备不需要权限)startService(new Intent(MainActivity.this, FloatWindowService.class));finish(); // 关闭主Activity}}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (Settings.canDrawOverlays(this)) {// 用户授予了权限,启动悬浮窗服务startService(new Intent(this, FloatWindowService.class));finish(); // 关闭主Activity} else {Toast.makeText(this, "未获得悬浮窗权限!", Toast.LENGTH_SHORT).show();}}}}
}

在开发者选项里,关闭掉 窗口动画缩放,就没有这个跳动问题了,所以这应该是窗口动画的bug,在调用setText的过程中,view的测量,布局中触发了窗口动画,并且使用了最初的坐标,大致是这样的思路。

http://www.dtcms.com/wzjs/536699.html

相关文章:

  • 做的网站怎么样才能再网上看到网站建设论文文献
  • 做的比较好的法律实务培训网站设计服务商
  • 西安手机定制网站建设帮企业建网站
  • 网站ip指向列表济南建筑公司
  • 深圳定制专业网站网站开发的课程
  • 安徽省建设厅官方网站发稿网
  • 沈阳网站关键词优化服务好市场体系建设司在官方网站
  • 58网站怎么样做效果会更好资阳网站建设公司
  • 品牌营销型网站作用如何进行网站建设和推广
  • 影视网站设计论文男科医院咨询免费
  • 路由器 做网站张家港做网站多少钱
  • 提供响应式网站建设网站代码加密了怎么做
  • 深圳展厅装修公司企业展厅设计公司windows优化大师好吗
  • 小精灵儿童网站免费做踢wordpress图文模板下载
  • 在家做的手工活哪里有网站开发公司采取措施成立新班推动工作
  • 第一章 网站建设基本概述wordpress 漏洞 扫描
  • 如何做垂直门户网站app软件系统开发
  • 自动打开多个同网站网页南通做网站找谁
  • 如何查询网站后台地址国内精自品线一区91制片
  • 做网站东莞东莞建网站wordpress在线教育
  • WordPress多用户建站手机网站建设策划方案
  • 专门建立网站的公司吗高端网站建设多少钱
  • 湛江有哪些网站建设公司国际设计网站有哪些
  • 天津营销网站建设公司什么是网络设计与电子商务
  • 宁波建网站推荐国家企业营业执照查询系统
  • 烟台网站建设求职简历个人网站可以做充值
  • 请人做外贸网站应注意什么问题如何在建设厅网站投诉
  • 网站建设流程知乎学编程的软件有哪些
  • 做网站要注意些什么要求潍坊网站建设教程
  • 品牌网站建设内容框架计算机技术员网站建设怎么