2012-03-26 13 views
0

なぜこのコードはサークルを1回だけ描​​画しますか?私は私の人生のためにそれを理解することはできません。何かリフレッシュや何かをする必要がありますか?私は一度描くために赤い点を得ることができますが、後のクリックは新しい点を表示しない、または前の点を移動することさえできません。このサークルはアンドロイドで1回しか描画しません

package ball.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class BallActivity extends Activity { 
/** Called when the activity is first created. */ 

BallView bv; 
int i = 0; 
TextView tv; 

//float x = 20; 
//float y = 20; 
float r = 20; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView) findViewById(R.id.top); 

    LinearLayout main = (LinearLayout) findViewById(R.id.main_view); 
    //main.addView(new BallView(this, 20, 20, 20)); 
    main.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      i++; 
      float x = event.getX(); 
      float y = event.getY(); 

      tv.setText("Clicks: " + i + "X: " + x + "Y: " + y); 
      LinearLayout ll = (LinearLayout) v; 
      ll.addView(new BallView(ll.getContext(), x, y, 25)); 

      return false; 
     } 
    }); 
} 
} 


package ball.test; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 
import android.view.View; 

public class BallView extends View{ 

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 

float x;// = 20; 
float y;// = 20; 
float r;// = 20; 

public BallView(Context context, float x, float y, float r) { 
    super(context); 
    this.x = x; 
    this.y = y; 
    this.r = r; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    paint.setColor(Color.RED); 
    //paint.setStyle(Style.FILL_AND_STROKE); 

    //canvas.drawColor(Color.WHITE); 
    canvas.drawCircle(x, y, r, paint); 
} 
} 
+0

コンソールにエラーや警告が表示されますか? – sarnold

答えて

3
AbsoluteLayoutにご LinearLayoutを変更し

。私はあなたの最初のBallViewが実際にLinearLayoutビューグループの全体を占めており、それに追加する他のビューがレイアウトから押し出されているということが起こっていると思います。

また、代わりにaddView(View, AbsoluteLayout.LayoutParams)を使用してください。BallView.onDrawとは対照的に、ボールのサイズ/位置を設定することができます。これにより、レイアウトのより小さな領域が汚れているとマークできます。

+0

私は同意しますが、私はAbsoluteLayoutが侮辱されていることを知っています。 Androidでは代わりにFrameLayoutまたはRelativeLayoutを使用することを提案しています。 – EGHDK

+0

私はそれをフレームレイアウトに変更し、それが私の問題を解決しました。提案していただきありがとうございます。 – linuxer

関連する問題