2011-12-08 5 views
5

私は非常に単純な小さなアプリケーションを拡張ビューで使っています。 問題は、私はonTouchEventで押されたものを見つけることができないということです。 私は、圧力点(xとy)を要素と比較し、どの要素がどれであるかを見てきたことを理解しました。onTouchEventのrectFの中で押された場合のチェック

しかし... 私が使用して矩形を宣言した。これまでのところ

Paint color= new Paint(); 
color.setColor(Color.BLACK); 
rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ; 
canvas.drawRect(rectF, color); 

とても良い、しかし

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x, y)) { 
      // Something should happen 
     } 

    } 

    invalidate(); 
    return true ; 
} 

onTouchEvent機能で、私は相対的なのいくつかの種類にrectFを設定ポイントは0〜1の範囲ですが、XとYは、画面サイズに応じて0以上のイベント範囲から取得します。

いずれかの値を簡単に変換できますか?

編集

は、タッチポイントの値とRectFがするorederにおいて同じ参照規模である必要はあり

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    int width = this.getWidth() ; 
    int height = this.getHeight() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x/width, y/height)) { 
      // Something should happen 
     } 

    } 

    return true ; 

} 

答えて

2

...誰かが最終的なソリューションに興味を持っていたと思いました適切に比較される。でRectF寸法を「非正規化」:

1:あなたの画面サイズ

OR 2でMotionEvent位置を正規化し、あなたのRectFを宣言する場合は、する必要がありますいずれか(0-1)相対的なサイズを使用することを意味実際の画面サイズ

実際のスクリーンサイズとは無関係に相対レイアウトの点で矩形を定義し、オンザフライでイベント位置を変換できるので、1は一般的に好まれると思います。

このような

:あなたがあなたの活動に
Display display = getWindowManager().getDefaultDisplay()を呼び出した後、私はむしろ、ビューの幅と高さを望んでいたことがわかったので、私display.getWidth()またはdisplay.getHeight()

+0

を呼び出すことにより、画面サイズを取得することができますrectF.contains(x/screenWidth, y/screenHeight);

代わりに 'this.getHeight()'と 'this.getWidth()'を使用しました。 – dubbe

+0

@あなたの文脈はわかりませんでしたので、私は最も単純なケースについてアドバイスをしました – kostja

+0

私は知っていて、完璧な助言でした。誰か他の人が同じことを探しているならば、 – dubbe

関連する問題