2

私は現在、クライアントサーバーシステムを備えたゲームパッド/ゲームのコントローラー機能を備えたAndroidアプリを使用しています。クライアントはAndroidで、サーバーはPCのJavaデスクトップアプリケーションであり、接続としてBluetoothです。これまでのところ、私のアプリケーションは 1 本の指 (ホールドまたはクリック) だけで動作しますが、今はイベントホールドボタン A + クリックボタン B またはホールドボタン A + ホールドボタン B で 2 本の指でマルチタッチを使用しています。 Android でのやり方を理解して、mCommandService(BluetoothCommandService.valueOfButon) でイベントを java に送信し、ボタン A がホールドされているときにボタン B がクリックされたことを Java で読み取り、robot.keyPress で値の表現を実行します。

私はこのブログhttp://luugiathuy.com/2011/02/android-java-bluetooth/の例を実装して、Android と Java 間の Bluetooth 接続を実現します。そして、これはAndroidでの私のonTouchメソッドです

public boolean onTouch(View v, MotionEvent event) {
switch(v.getId()){
    case R.id.tombolL1:
        cmd = BluetoothCommandService.aksi_l1;
    break;

    case R.id.tombolL2:
        cmd = BluetoothCommandService.aksi_l2;
    break;

    case R.id.tombolR1:
        cmd = BluetoothCommandService.aksi_r1;
    break;

    case R.id.tombolR2:
        cmd = BluetoothCommandService.aksi_r2;
    break;

    case R.id.tombolAtas:
        cmd = BluetoothCommandService.arah_atas;
    break;

    case R.id.tombolBawah:
        cmd = BluetoothCommandService.arah_bawah;
    break;

    case R.id.tombolKiri:
        cmd = BluetoothCommandService.arah_kiri;
    break;

    case R.id.tombolKanan:
        cmd = BluetoothCommandService.arah_kanan;
    break;

    case R.id.tombolSegitiga:
        cmd = BluetoothCommandService.aksi_segitiga;
    break;

    case R.id.tombolBulat:
        cmd = BluetoothCommandService.aksi_bulat;
    break;

    case R.id.tombolSilang:
        cmd = BluetoothCommandService.aksi_silang;
    break;

    case R.id.tombolKotak:
        cmd = BluetoothCommandService.aksi_kotak;
    break;

}

switch(action){
    case MotionEvent.ACTION_DOWN:
        handler1.removeCallbacks(mUpdateTask);
        handler1.postAtTime(mUpdateTask, 200);
    break;

    case MotionEvent.ACTION_UP:
        handler1.removeCallbacks(mUpdateTask);
    break;
}
return false;
}

private Runnable mUpdateTask = new Runnable() {

    @Override
    public void run() {
        mCommandService.write(cmd);
        handler1.postAtTime(this, SystemClock.uptimeMillis() + 100);
        //handler1.postAtTime(this, 200);
    }
};

そして、JavaのこのprocessCommandメソッド

private void processCommand(int command) {
    try {
        Robot robot = new Robot();
        int key = 0;
        switch(command){
            case arah_atas:
                key = KeyEvent.VK_UP;
            break;
            case arah_bawah:
                key = KeyEvent.VK_DOWN;
            break;
            case arah_kiri:
                key = KeyEvent.VK_LEFT;
            break;
            case arah_kanan:
                key = KeyEvent.VK_RIGHT;
            break;
            case aksi_segitiga:
                key = KeyEvent.VK_A;
            break;
            case aksi_bulat:
                key = KeyEvent.VK_X;
            break;
            case aksi_silang:
                key = KeyEvent.VK_Z;
            break;
            case aksi_kotak:
                key = KeyEvent.VK_S;
            break;
            case aksi_l1:
                key = KeyEvent.VK_Q;
            break;
            case aksi_l2:
                key = KeyEvent.VK_W;
            break;
            case aksi_r1:
                key = KeyEvent.VK_R;
            break;
            case aksi_r2:
                key = KeyEvent.VK_E;
            break;
            case aksi_select:
                key = KeyEvent.VK_SPACE;
            break;
            case aksi_start:
                key = KeyEvent.VK_M;
            break;
        }

        robot.keyPress(key);
        Thread.sleep(50);
        robot.keyRelease(key);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

どうすれば必要なのか教えてください。

4

1 に答える 1

0

Android でマルチタッチに手を出したことがある人として、このライブラリを利用することをお勧めします。マルチタッチの核心に対処するという頭痛の種を抽象化します。拡大縮小、回転などを行うことができます。マルチタッチにバグがある携帯電話をサポートし、デモ プロジェクトがいくつかあります。さらに (これは以前にも行ったことがあります)、変換行列を抽出してこの情報をデータベースに保存し、後でグラフィックに再適用して、適切に初期化することができます。

于 2013-01-14T04:57:24.403 に答える