簡體   English   中英

Android布局觸摸問題

[英]Android layout touch issue

我正在構建測試鎖定屏幕應用程序。 我已經完成了設計工作,並且可以工作,但是無論您按什么位置,它都會按數字1的位置注冊,然后進行相對於此的設計。 這是主要設計:

主圖

現在,如果我單擊第一個位置,它會注冊一個,如果我拖動到2或3,依此類推。它會按照拖動的順序注冊這些數字。 但是,如果我要從位置2開始,它仍然會注冊為位置1,因此所有內容都會“正向移動”(不是設計,而是矩形的點)。

我怎樣才能解決這個問題? 無論點擊何處,我都會得到這個信息(例如我點擊了位置2):

正在顯示位置1

但是我需要這個:

在此處輸入圖片說明

這是我的Java代碼,可以繪制矩形以及在觸摸矩形時:

public void onWindowFocusChanged (boolean hasFocus){
    super.onWindowFocusChanged(hasFocus);       
        b1R = new Rect(b1.getLeft(), b1.getTop(), b1.getRight(), b1.getBottom());
        b2R = new Rect(b2.getLeft(), b2.getTop(), b2.getRight(), b2.getBottom());
        b3R = new Rect(b3.getLeft(), b3.getTop(), b3.getRight(), b3.getBottom());
        b4R = new Rect(b4.getLeft(), b4.getTop()+120, b4.getRight(), b4.getBottom()+120);
        b5R = new Rect(b5.getLeft(), b5.getTop()+120, b5.getRight(), b5.getBottom()+120);
        b6R = new Rect(b6.getLeft(), b6.getTop()+120, b6.getRight(), b6.getBottom()+120);
        b7R = new Rect(b7.getLeft(), b7.getTop()+240, b7.getRight(), b7.getBottom()+240);
        b8R = new Rect(b8.getLeft(), b8.getTop()+240, b8.getRight(), b8.getBottom()+240);
        b9R = new Rect(b9.getLeft(), b9.getTop()+240, b9.getRight(), b9.getBottom()+240);

}
public boolean onTouch(View arg0, MotionEvent arg1) {
    // TODO Auto-generated method stub
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    x = (int) arg1.getX();
    y = (int) arg1.getY();

    if(b1R.contains(x, y)){
        arr.add("1");
        Log.d("block", "1");
    }
    if(b4R.contains(x,y)){
        arr.add("4");
        Log.d("block", "4");
    }
    if(b7R.contains(x,y)){
        arr.add("7");
        Log.d("block", "7");
    }

    if(b2R.contains(x,y)){
        arr.add("2");
        Log.d("block", "2");
    }
    if(b8R.contains(x,y)){
        arr.add("8");
        Log.d("block", "8");
    }
    if(b5R.contains(x,y)){
        arr.add("5");
        Log.d("block", "5");
    }

    if(b3R.contains(x,y)){
        arr.add("3");
        Log.d("block", "3");
    }
    if(b6R.contains(x,y)){
        arr.add("6");
        Log.d("block", "6");
    }
    if(b9R.contains(x,y)){
        arr.add("9");
        Log.d("block", "9");
    }

    return false;
}

bXr.contains處於該順序的原因是因為如果它是0-9順序,它將無法正確注冊,因此會抓狂並注冊1、2和3(然后是4、5和6,然后是7、8 9)由於某種原因,它們都在同一塊中。

有任何想法嗎?

我不知道您使用什么技巧,但我敢打賭,您在Layout中有九個(Image)Views,並將它們的所有touchevent注冊到一個偵聽器中。 如果這樣做,則會發生您描述的效果,因為觸摸事件在觸摸視圖的子坐標系中。

您可以在所有內容上方放置一個透明視圖,並使用到達此處的觸摸事件。 然后它將起作用。 或者您將所有內容繪制在一個視圖中。

暫無
暫無

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

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