Приложение на apk за калибриране на екрана на Android
Android Screen Calibration Apk Application Implementation
Following the previous blog post, to implement screen calibration in the android kernel, the main purpose of this blog post is to transplant the executable file ts_calibrate into an android apk application.
Сега знаем, че се приема ts_calibrate тъч скрийн Координатите на 5 точки и след това съответните Екран Решават се едновременни уравнения на точкови координати, за да се получат 7 калибрационни параметъра.
Процесът на директно качване на изходния код:
Създайте нов клас Calibrate, методът на класа perform_calibration () реализира горния алгоритъм за решаване на 7-те параметъра за калибриране, а calibrate_main () генерира пойнтеркални файлове за 7-те параметъра за калибриране. Конкретната реализация се копира от tests / ts_calibrate.c в директорията на източника tslib.
След това нарисувайте страница за калибриране, която да ръководи операцията с щракване върху екрана, и да получите последователно координатите от 5 точки.
Първо вземете свързаните с екрана параметри в страницата за калибриране TSCalibrateActivity:
Display display = this.getWindowManager().getDefaultDisplay() Point outSize = new Point() // Obtain the screen width and height data through the Display object and save it to the Point object display.getSize(outSize) // Get the width and height from the Point object UI_SCREEN_WIDTH = 800//outSize.x UI_SCREEN_HEIGHT = 480//outSize.y
Но реалната ситуация е, че получената стойност не е била вярна. Оригиналната разделителна способност е 800 * 480, а полученият резултат винаги е бил 752 * 480. Проверих лентата на състоянието и лентата за навигация, но използваният от мен екран на цял екран няма това. Две. Ако не разбирате, нека първо запишем.
Според UI_SCREEN_WIDTH и UI_SCREEN_HEIGHT, извадени по-горе, се определят координатите на горния ляв ъгъл, горния десен ъгъл, долния десен ъгъл, долния ляв ъгъл и средата на екрана на дисплея. И според това да реализирате ръководството за калибриране на екрана.
Следващата стъпка е да се определят петточковите координати на сензорния екран,
Методът за вземане на координатите на точка в Android, като getX () или getRawX (), е да се вземат координатите на дисплея, така че трябва да направите преобразуване. За информация вижте публикацията в блога (връзка: връзка .)
Две формули:
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. Прикачете снимка с резултат:
По-голямата част от изходния код беше намерен от друг изходен код и аз го модифицирах отгоре според моето реално положение. Можете да го изтеглите, ако имате нужда.