这个圈子只在android中绘制一次

时间:2012-03-26 22:04:18

标签: 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);
}
}

1 个答案:

答案 0 :(得分:3)

将您的LinearLayout更改为AbsoluteLayout。我认为发生的事情是您的第一个BallView实际上占用了整个LinearLayout视图组,而您添加到其中的任何其他视图都被推出了布局。

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