2012-03-26 47 views
0

为什么此代码只绘制一圈?我不能为我的生活弄清楚。我需要做些什么刷新或什么?我能够得到一个红点,绘制一次,但任何点击后不显示一个新的点,甚至移动前一个点。此圈只在android中绘制一次

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 2012-03-26 22:09:29

回答

3

更改LinearLayoutAbsoluteLayout。我认为发生的事情是,您的第一个BallView实际上占用了整个LinearLayout视图组,并且您添加到其中的任何其他视图都将被排除在布局之外。

另外,请使用addView(View, AbsoluteLayout.LayoutParams)来代替,因此您可以设置球的大小/位置,而不是BallView.onDraw,这样可以让布局的较小区域标记为脏。

+0

我同意,但我知道AbsoluteLayout被贬损。 Android建议改为使用FrameLayout或RelativeLayout。 – EGHDK 2012-03-26 22:12:40

+0

我将其更改为框架布局,并解决了我的问题。感谢您的建议。 – linuxer 2012-03-26 22:27:45