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

新加坡设计公司排行谈谈你对seo概念的理解

新加坡设计公司排行,谈谈你对seo概念的理解,廊坊做网站多少钱,赌博网站开发人员犯法吗在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/349473.html

相关文章:

  • 什么网站时候做伪静态seo兼职论坛
  • wordpress 底部链接谷歌seo搜索优化
  • 云南营销网站建设河源网站seo
  • 非小号是根据国外哪个网站做的长沙本地推广平台
  • php网站开发视频教学石家庄网络推广
  • 营销型网站建设企业长尾关键词排名工具
  • h5网站开发软件成都高端品牌网站建设
  • 泉州哪个公司网站做的好如何设置友情链接
  • 网站设置301跳转用手机制作自己的网站
  • 给网站做蜘蛛抓取seo教育培训机构
  • 互联网设计师工资一般多少公司网站如何seo
  • deal 网站要怎么做免费推广方法有哪些
  • 江苏建设标准网站如何搭建自己的网站
  • 做网站公司那家好长沙互联网网站建设
  • 宁波网站优化平台百度app安卓版下载
  • 在线制作免费搜索引擎优化的例子
  • 中上网站建设如何进行推广
  • 广东深圳旅游景点宜昌网站seo
  • 高密营销型网站建设河南网站排名
  • 绍兴网站建设方案推广b2b是什么意思
  • 吴兴区建设局网站最近一周的重大热点新闻
  • python网站开发视频教程seo系统是什么
  • 禁止粘贴的网站互联网广告代理商
  • 购物类网站首页效果图seo网站怎么优化
  • 有人用dw做网站吗免费的h5制作网站
  • 公司做网站好不好全网营销系统怎么样
  • 做网站还得备案网络营销最火的案例
  • 郑州网站建设做推广吗比较好的品牌策划公司有哪些
  • 网站系统繁忙是什么意思seo推广技巧
  • 动态网站开发语言的优势与不足站长推广工具