簡體   English   中英

如何在Java中響應android的multitouch

[英]how to respond to multitouch of android in java

我目前正在使用具有客戶端/服務器系統的手柄/游戲控制器功能的android應用程序,其中客戶端為android,服務器為PC和藍牙作為連接的java桌面應用程序。 到目前為止,我的應用程序僅用一根手指(按住或單擊)工作,現在我正在事件保持按鈕A +單擊按鈕B或按住按鈕A +保持按鈕B的情況下,用兩根手指使用多點觸摸。 t了解如何在android上執行操作的想法,使用mCommandService(BluetoothCommandService.valueOfButon)將事件發送給Java,讀入Java表示按住按鈕A時單擊了按鈕B,並使用robot.keyPress執行值表示。

我實現了此博客http://luugiathuy.com/2011/02/android-java-bluetooth/中的示例,用於實現android和java之間的藍牙連接。 這是我在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();
    }
}

請讓我知道我該怎么做?

作為精通Android中的多點觸控的人,我建議您使用庫。 它抽象了處理多點觸控的煩惱的煩惱。 您可以縮放,旋轉等。它為多點觸控有問題的手機提供支持,並提供一些演示項目。 而且(您之前已經做過),您可以提取轉換矩陣並將此信息存儲在數據庫中,然后將其重新應用於圖形,以便正確初始化它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM