Android画面キャリブレーションapkアプリケーションの実装



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つのキャリブレーションパラメーターのポインターファイルを生成します。特定の実装は、tslibソースディレクトリのtests /ts_calibrate.cからコピーされます。

次に、画面をクリックする操作をガイドするキャリブレーションページを描画し、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に従って、表示画面の左上隅、右上隅、右下隅、左下隅、中央の座標が決定されます。そしてこれによると、画面キャリブレーションのガイドページを実現します。

次のステップは、タッチスクリーンの5点座標を決定することです。
getX()やgetRawX()などのAndroid上のポイントの座標を取得する方法は、表示画面の座標を取得することであるため、変換を行う必要があります。詳細については、ブログ投稿(リンク: リンク 。)
2つの式:



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が行われます。結果の写真を添付し​​てください:
画像

ソースコードのほとんどは別のソースコードから見つかったので、実際の状況に応じて上から変更しました。必要に応じてダウンロードできます。