Android屏幕校准的apk应用实现

news/2024/11/30 13:42:35/
紧跟着上一篇博文,在android内核中实现屏幕校准,这一篇博文主要做的便是将可执行文件ts_calibrate移植成android的apk应用。

现在我们已经知道,ts_calibrate就是取了触摸屏 5个点的坐标,然后与对应的显示屏的点坐标联立方程,求解得到7个校准参数。

直接上源码过程:

新建一个类Calibrate,类方法perform_calibration()实现上述求解7个校准参数的算法,calibrate_main()将7个校准参数生成pointercal文件。具体实现都是从tslib源码目录下tests/ts_calibrate.c中copy出来的。

然后就是画一个校准页面引导点击屏幕的操作,依次取得5个点的坐标。
先在校准页面TSCalibrateActivity里获取一下屏幕的相关参数:

Display display = this.getWindowManager().getDefaultDisplay();
Point outSize = new Point();
// 通过Display对象获取屏幕宽、高数据并保存到Point对象中
display.getSize(outSize);
// 从Point对象中获取宽、高
UI_SCREEN_WIDTH = 800;//outSize.x;
UI_SCREEN_HEIGHT = 480;//outSize.y;

但实际情况是,获取出来的值一直对不上,本来是分辨率800 * 480,获取的结果一直是752 * 480,查过了什么状态栏导航栏这些,但是我用的全屏显示,没这两个啊。没搞懂,先写死吧。

根据上面取出来的UI_SCREEN_WIDTH 、UI_SCREEN_HEIGHT,确定了显示屏的左上角、右上角、右下角、左下角、中间的坐标。并依此实现屏幕校准的引导页面。

接下来就是确定触摸屏的5个点坐标,
android上取点坐标的方法,比如通过getX()或者getRawX()都是取的显示屏的坐标,所以需要做换算一下。查阅资料,具体可以参考博文 (链接: link.)
其中两个公式:

x=(x-xmin)*480/(xmax-xmin) ;
y=(y-ymin)*800/(ymax-ymin);

将公式逆推下,就可以从显示屏的坐标换算成触摸屏的点坐标了

x1 = (int)(( event.getRawX() * 4095.0 ) / (float)UI_SCREEN_WIDTH);//4095
y1 = (int)(( event.getRawY() * 4095.0 ) / (float)UI_SCREEN_HEIGHT);//usb touch x 0x7ff

然后你以为这样取的点坐标,用Calibrate去处理就万事大吉了?
根据我的血泪教训,那就是错觉。。。。
因为我们在上一篇博文中,我已经改了屏幕驱动,现在通过android获取的显示屏的坐标是已经经过校准的了,用这个校准后的显示屏坐标换算出来的触摸屏坐标也是换算过后的,并不是原始的坐标!!!
就这,肯定得不出能用的7个校准参数啊 - -||

所以,后来我又在屏幕驱动里添加了一个calibration_flag,用来标志是否进行校准:

if(calibration_flag == 1)
{array_x[cnt] = LCD_X;array_y[cnt] = LCD_Y;
}
else
{array_x[cnt] = X;array_y[cnt] = Y;
}

在进入屏幕校准程序后,就将这个标志位写0;完成校准后,将标志位写1。

这样我的apk才算是大功告成。附一张成果图:
在这里插入图片描述

大部分源码都是从另一份源码上找的,我根据自己的实际情况从上面做了修改。有需要的可以下载看看。


http://www.ppmy.cn/news/430950.html

相关文章

Debian/ubuntu 显示屏幕校准

//转载: https://www.cnblogs.com/yongpan/p/7846531.html ubuntu多显示器单触摸屏校准 多显示器单触摸屏屏幕校准 https://www.freedesktop.org/wiki/Software/xinput_calibrator/ 0、触摸屏重定向 sudo xinput map-to-output 13 DP1 #将触摸屏映射到指定的显…

Android系统 屏幕最低背光亮度值/最高背光亮度值 调试

通过 adb 确认合适的 最低背光亮度值/最高背光亮度值 参数 , 并使用万用表量测 背光IC的反馈电阻输出电压确认,具体计算方式根据 背光IC 贴的反馈电阻来计算。(可以找硬件协助 一般是 1.35 / 1.1) adb shell Dslide_1020Pro:/ $ su Dslide_10…

iqoo手机计算机背景变白,更精准的色彩显示,出厂屏幕校准的手机大合集

如今,手机的屏幕越来越得到重视,不仅仅提现在屏幕刷新率方面,人们对于屏幕的色准的需求也不断提高。手机厂商也看到了这方面的需求,在一些产品出厂时,就做了色准调校。不过这样的产品也有不少呢,不妨看看下…

linux系统屏幕触摸校准

1、安装工具 xinput-calibrator工具:sudo apt-get install xinput-calibrator xinput工具:sudo apt-get insatll xinput 2、校准实例 (1)查看触摸设备id:xinput_calibrator --list 上面可知:device nam…

给android增加屏幕校准

android原始版本里是没有屏幕校准功能的,tp坐标到lcd坐标是完全按照线性关系来转换的。例如,tp坐标是(Xt ,Yt )分辨率是(Wt x Ht ),lcd坐标是(X,Y),分辨率是(W x H),则 X(Xt *W)/Wt,…

Android屏幕校准

android原始版本里是没有屏幕校准功能的,tp坐标到lcd坐标是完全按照线性关系来转换的。例如,tp坐标是(Xt ,Yt )分辨率是(Wt x Ht ),lcd坐标是(X,Y),分辨率是(W x H),则 X(Xt *W)/Wt,…

6.Sentincl控制台 规则 实战

一、流控规则 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果: Fiel…

百度网盘转存腾讯微云

https://www.zhihu.com/question/21879203