2011-11-02 25 views
0

Androidアプリでは、現在のところ、背景色を持つRelativeLayoutとonCreateというアクティビティが1つあります。デバイスの画面の幅と高さに基づいた相対的なレイアウトです。コードスニペットは次のとおりです。キャンバスに描かれた円をドラッグして画面上でドラッグする(アンドロイド)

MyActivity.java 

package com.myapp.android; 

import java.util.Random; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Display; 
import android.widget.RelativeLayout; 

public class MyActivity extends Activity { 
    /** Called when the activity is first created. */ 
    Random randomGenerator = new Random(); 
    String[] colors = { "#84B62C", "#6A28F2","#F3FA0A", "#DF1FE4", "#0000A0", "#28C9DB", "#E05323"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     RelativeLayout main = (RelativeLayout) findViewById(R.id.main_myapp); 
     // Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

     Display display = getWindowManager().getDefaultDisplay(); 
     int width = display.getWidth(); 
     int height = display.getHeight(); 

     int number_side = width/100; 
     int number_down = height/100; 
     for(int i = 0; i < (number_side * number_down) * 3; i++) { 
       main.addView(new Ball(this,randomGenerator.nextInt(width), randomGenerator.nextInt(height), 40 * (randomGenerator.nextInt(3)), colors[randomGenerator.nextInt(colors.length)], "BALL" + Integer.toString(i))); 
     } 
    } 
} 

これは、すべての色付き円を画面全体にランダムに描画します。いいね。 Ball.javaの円が描かれているコードは次のとおりです。

Ball.java 

package com.myapp.android; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.RelativeLayout; 

public class Ball extends View { 

    private final float x; 
    private final float y; 
    private final int r; 
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

    public Ball(Context context, float x, float y, int r, String color, String tag) { 
     super(context); 
     mPaint.setColor(Color.parseColor(color)); 
     this.x = x; 
     this.y = y; 
     this.r = r; 
     this.setTag(tag); 
} 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawCircle(x, y, r, mPaint); 
    } 

} 

は、私は何をしようとしていると、ユーザーは色付きの円のいずれかに触れてみましょうと、彼らがしたいが、私はそれらを移動するために得ることができないところはどこでも画面上にドラッグします。私はここに試用コードを掲載していません。

スクリーンに描かれたサークル(一度に1つのサークル、特にユーザーが触れたサークル)でユーザーのタッチ(これはonTouchでもonLongClickでもよい)を検出し、その後ドラッグ(ACTION_UP - 私の推測)を解放するまで、ユーザーのタッチ・ドラッグ・アクション(ACTION_MOVE - 私の推測)に従うサークル(本質的に、実行時に主相対レイアウト・ビュー・グループに追加されたビューです)。

このトピックに関するいくつかのチュートリアルを読んだことがありますが、本当に役に立たなかったり、私のユースケースには当てはまりませんでした。また、2DグラフィックスキャンバスまたはOpenGL APIを私のケースで使用する必要がありますので、サークル上のドラッグ操作が非常にスムーズかつ瞬時に行われるように、知識のある人に尋ねたいと思います。私の簡単なコードを実行しても構いませんが、画面上にボールが描かれるまでうまく動作します。

答えて

0

あなたの実装では、ボールをビューとみなし、多くのボールがあるため、多くのビューがあります。

私があなたの場合は、画面全体が1つのビューであり、ボールがそのビュー内のスプライトだけであると考えます。

私はViewクラスまたはSurfaceViewクラスを拡張し、すべての座標とボールのサイズを格納するCollection as属性を持ちます。 onDraw()の内部では、コレクションをループして正しいサイズの正しい位置にボールを描画する必要があります。

関連する問題