簡體   English   中英

自定義視圖觸摸事件

[英]Custom View Touch Events

我正在嘗試實現一個自定義視圖,用戶可以在其中用手指繪畫。 基本上,我正在學習本教程

一切似乎都運行良好,但是,考慮到我在自定義視圖下還有兩個按鈕的事實,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background_color"
    tools:context=".MainActivity" 
    android:id="@+id/mainScreen" >

    <Button
        android:id="@+id/buttonSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:text="@string/save" />

    <Button
        android:id="@+id/buttonQuery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:text="@string/query" />

    <com.example.myapp.DrawView
        android:id="@+id/drawView"
        android:background="@color/red"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_above="@id/buttonSave" />

</RelativeLayout>

它實際上甚至在按鈕下方繪制,而且我很難理解為什么它不只捕獲發生在DrawView上而不發生在DrawView之外的觸摸事件。 基本上,我不能從按鈕上方開始線條,但是一旦我開始在視圖上繪圖,我什至可以將線條延伸到其外部。

據我所知,正如下面所討論的 ,DrawView不會在按鈕下方溢出,所以我想知道發生了什么。 我真的需要檢查事件是否超出范圍嗎? 它實際上是否將所有觸摸事件都委派給當前聚焦的視圖? 有什么辦法可以改變這種行為?

這個簡單的教程沒有所描述的問題,但是它逐點繪制。


更新:調試應用程序后,我確定drawView的大小為480x728,而mainScreen的大小為480x800,因此它們不會重疊。 一旦獲得焦點,即使在drawView之外觸發觸摸事件,它也會繼續注冊。 這就是我要避免的事情,並且最好不要通過大的if語句傳遞事件坐標來做到這一點……

如果您不希望按鈕與DrawView重疊, DrawView使用LinearLayout將所有View分開。 目前,從XML布局判斷(並假設沒有什么時髦的布局編程代碼事),你的按鈕重疊DrawView

我給您的印象是兩個按鈕並排放置在頂部,而DrawView填充了下面的其余屏幕區域。 為此,請使用垂直方向的外部容器LinearLayout 它的第一個孩子是另一個水平放置的LinearLayout ,其中包含兩個按鈕。 內部LinearLayout的第二個子級是DrawView 使用寬度,高度和重量屬性獲得所需的尺寸。 (或者,另一種方法是保留您擁有的XML布局結構,但是在DrawView上設置一些頂部邊距以等於按鈕的高度,可以將其固定在XML布局中,或者以編程方式完成。)

編輯抱歉,我完全錯過了layout_above屬性,該屬性使我的第二句話無效。 在那種情況下,目前還不能啟動Eclipse。 無論如何,請嘗試使用LinearLayout方法。

原來這是Android模擬器顯示界面方式中的一個怪異錯誤。 它可能會在實際設備上做類似的事情(甚至在偵聽器視圖之外drawView觸摸事件),但是由於它將顯示限制為drawView ,因此對於我的應用程序,我可以放心地忽略它們,因為我只需drawView屏幕上提取繪制的形狀即可。 drawView 不過,這可能會在其他應用程序中引起頭痛。

暫無
暫無

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

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