2016-04-21 9 views
0

(タイトルはわかりません)ムービービュー(オーバーラップ)が上に表示されているかどうかを知る方法

こんにちは。私は小さなゲームを作成しようとしています。プレーヤーはRalativeLayoutの中でオブジェクトを動かすことができます。私が望むのは、私の移動するオブジェクトがFrameLayoutの中にあるのか、その外にあるのかをチェックすることです。例えば、私がFrameLayoutの中にいるときに、このオブジェクトのテキストを変更したいと思います。

だから私はforループ内のオブジェクトをこのように作成します。

Random random = new Random(); 
for (int i = 0; i < 3; i++) { //any number, not just 3 
      TextView textView = new TextView(getActivity()); 
      textView.setX(random.nextInt(size.x - 200)); 
      textView.setY(random.nextInt(size.y - 200)); //scattered all over the screen 
      textView.setText(i + ""); 
      textView.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
      textView.setTextSize(50); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      textView.setLayoutParams(lp); 
      textView.setOnTouchListener(touchListener); 
      frameFor.addView(textView); 
     } 

最終的に私のすべてのオブジェクトがあるべきでframeLayoutもあります:

RelativeLayout.LayoutParams frameLP = new RelativeLayout.LayoutParams(300, 300); 
     frameLP.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 
     frameForLetters.setLayoutParams(frameLP); 

あなたが見ることができるように、私も追加OnTouchListenerオブジェクトを移動可能にする:

View.OnTouchListener touchListener = new View.OnTouchListener() { 
     float dX, dY; 

     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 

        dX = view.getX() - event.getRawX(); 
        dY = view.getY() - event.getRawY(); 
        break; 

       case MotionEvent.ACTION_MOVE: 

        view.animate() 
          .x(event.getRawX() + dX) 
          .y(event.getRawY() + dY) 
          .setDuration(0) 
          .start(); 
        break; 
       default: 
        return false; 
      } 
      return true; 
     } 
    }; 

彼の写真を見ると、の1つがの2つがで、内側がFrameLayoutでゼロが外になっています。 enter image description here

私はそれがすべて幾何学の巨大な量と各オブジェクトとFrameLayout自体のサイズを計算することができることを知っています。多分、これを行う別の方法がありますか?私の仕事をずっと簡単にすることができるライブラリやフレームワークがあるのでしょうか?

答えて

1

Rect.intersects方法は、計算のほとんどを行います)私はライブラリやフレームワークを認識してないんだけど、あなたはオブジェクトが重なっているかどうかを判断するためにこれらの2つの方法を使用することができます。

private Rect getScreenBounds(View view) 
{ 
    int[] location = new int[2]; 
    view.getLocationOnScreen(location); 

    return new Rect(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight()); 
} 

private boolean doViewsIntersect(View target, View item) 
{ 
    Rect targetRect = getScreenBounds(target); 
    Rect itemRect = getScreenBounds(item); 

    return targetRect.intersects(itemRect); 
} 

あなたがしている場合オブジェクトが完全に他のものの内部にあるかどうかを知ることに興味がある場合、targetRectは、交差点を含むRectになります。したがって、アイテムがターゲット範囲内に完全に含まれているかどうかを確認するには、次の操作を実行できます。

if(targetRect.intersects(itemRect)) { 
    return targetRect.width() == item.getWidth() && targetRect.height() == item.getHeight(); 
} else { 
    return false; 
} 
関連する問題