2011-12-15 17 views
2

私は基本的に図形を描くためのアンドロイドアプリケーションを開発しようとしています。ユーザーが画面上でジェスチャーを行い、ジェスチャーにさらに近い図形を画面に描きたいと思います。 私のアプリケーションでは、円、線、矩形などのように画面上で実行されているジェスチャーを検出できますが、コードに問題があります。実際にジェスチャーを検出してそれぞれの形状を描画します。Android Gesture Detection

たとえば、画面上にLineを描画すると、線が描画されますが、その後は円や四角形などを描くとジェスチャは認識されますが、図形は描画されません。

はここにあなたのコードがのLinearLayout内のビューの増え続けるが生成されますように見えますその

package com.pck.ShapeMaker; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.gesture.Gesture; 
import android.gesture.GestureLibraries; 
import android.gesture.GestureLibrary; 
import android.gesture.GestureOverlayView; 
import android.gesture.Prediction; 
import android.gesture.GestureOverlayView.OnGesturePerformedListener; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class GestureDetection extends Activity { 
    private GestureLibrary gLib;  
    private LinearLayout l1; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gesture); 
     l1 = (LinearLayout) findViewById(R.id.playArea); 

     gLib = GestureLibraries.fromRawResource(this, R.raw.gestures); 
     if (!gLib.load()) 
      finish(); 
     GestureOverlayView gesturesView = (GestureOverlayView) findViewById(R.id.gestures); 
     myGestureHandler handler = new myGestureHandler();  
     gesturesView.addOnGesturePerformedListener(handler); 


    } 

    class myGestureHandler implements OnGesturePerformedListener{ 

     public void onGesturePerformed(GestureOverlayView gestureView, Gesture gesture){ 
      ArrayList<Prediction> predictions = gLib.recognize(gesture);   


      if (predictions.size() > 0 && predictions.get(0).score > 1.0) { 
       String action = predictions.get(0).name; 
       if ("l".equals(action)) { 
        Line line = new Line(getApplicationContext(),20,230,200,230); 
        l1.addView(line); 
       } else if ("r".equals(action)) { 
        Rectangle rect = new Rectangle(getApplicationContext()); 
        l1.addView(rect); 
        Toast.makeText(getApplicationContext(), "rect", Toast.LENGTH_SHORT).show(); 
       } else if ("t".equals(action)) { 
        Triangle tri = new Triangle(getApplicationContext(), 300,300,250, 350, 350, 350); 
        l1.addView(tri); 
        Toast.makeText(getApplicationContext(), "trianlge", Toast.LENGTH_SHORT).show(); 
       }else if ("c".equals(action)) { 
        Circle c1 = new Circle(getApplicationContext(),50,50,30); 
        l1.addView(c1); 
        Toast.makeText(getApplicationContext(), "circle", Toast.LENGTH_SHORT).show(); 
       }else if ("d".equals(action)) { 
        Toast.makeText(getApplicationContext(), "diamond", Toast.LENGTH_SHORT).show(); 
       } 
      } 




      } 

    } 
} 
+0

あなたの問題を解決しましたか?私は同じです。 – LoveMeow

答えて

0

の完全なコードです。それはあなたが意図したものですか?そうでない場合は、新しいビューを追加する前にレイアウトから廃止されたビューを削除することができます。問題は、最初のレイアウトが追加された後に、後続のビューのレイアウトにスペースがないことです。

また、このようなビューを動的に追加することは、グラフィックを描画するための奇妙な方法のようです。すべてのタイプの図面をカバーするための単一のカスタムビューを定義し、それを静的にXMLに含めることをお勧めします。 onGesturePerformed()メソッドは、ビューのいくつかのメソッドを呼び出して実行する描画のタイプを指定し、invalidate()を呼び出して再描画をトリガーします。ビューのonDraw()メソッドは、指定されたばかりのグラフィックを描画します。

関連する問題