Android 无法刷新画布-通过绘制,但不';不变

Android 无法刷新画布-通过绘制,但不';不变,android,android-widget,Android,Android Widget,我在小部件中重新绘制画布时遇到问题。我创建自定义小部件,并希望在单击时重新绘制第一个单元格。 有很多活动 public class TestView extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

我在小部件中重新绘制画布时遇到问题。我创建自定义小部件,并希望在单击时重新绘制第一个单元格。 有很多活动

public class TestView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ElementView ev = (ElementView)findViewById(R.id.surface2);
        ev.setOnClickListener(evOnClick);

    }

    public OnClickListener evOnClick = new OnClickListener() {

        @Override
        public void onClick(View v) {
            ElementView temp=(ElementView)v;
            temp.paint.setColor(Color.RED);
            temp.canvas.drawRect(new Rect(0,0,90,90),temp.paint);
            temp.postInvalidate();
        }
        };
}
还有ElementView(我想重新绘制的小部件)

}


当我单击ElementView时,它会在onClick中输入Activity并毫无错误或异常地传递代码,但不会更改视图。有人能告诉我哪里出错了吗?

我认为在
onDraw
方法之外写入
画布
不会对屏幕产生任何影响


尝试在您的
onClick
方法中设置一个标志,您在
onDraw
中读取该标志将触发绘图例程。

设置标志是什么意思。.我相信视图中的onDraw方法被某个调用覆盖。.可以从外部显式调用吗?如果您得到答案。.如果它工作,请在你的问题部分添加一段代码作为“编辑”,这样其他人也可以学习
public class ElementView extends View {
    private final int width=100;
    private final int height=100;
    public Paint paint=null;
    public Canvas canvas=null;

    public ElementView(Context context) {
        super(context);
        paint = new Paint();
    }

    public ElementView(Context context, AttributeSet attr) {
        super(context, attr);
        paint = new Paint();
    }


    public ElementView(Context context, AttributeSet attr, int defaultStyles) {
        super(context, attr, defaultStyles);
        paint = new Paint();
    }

    @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        int measuredWidth = MeasureSpec.getSize(widthSpec);
        int measuredHeight = MeasureSpec.getSize(heightSpec);
        setMeasuredDimension(this.width,this.height);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        this.canvas=canvas;
        // get the size of your control based on last call to onMeasure
        int height = getMeasuredHeight();
        int width = getMeasuredWidth();

        // Now create a paint brush to draw your widget

        paint.setColor(Color.GREEN);

        //define border
        this.canvas.drawLine(0, 0, 0, 99, paint);
        this.canvas.drawLine(0, 0, 99,0, paint);
        this.canvas.drawLine(99, 0, 99, 99, paint);
        this.canvas.drawLine(0, 99, 99,99, paint);

        //define cells
        this.canvas.drawLine(0,50,99,50,paint);
        this.canvas.drawLine(30,0,30,50,paint);

        //draw green rectangle
        this.canvas.drawRect(new Rect(0,0,50,50),paint);
        //draw some text
        paint.setTextSize(8);
        paint.setColor(Color.RED);
        String displayText = "test";


        Float textWidth = paint.measureText(displayText);

        int px = width / 2;
        int py = height / 2;
        this.canvas.drawText(displayText, px - textWidth / 2, py, paint);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        paint.setColor(Color.RED);
        //change color of first cell
        canvas.drawRect(new Rect(0,0,50,50),paint);
        return super.dispatchTouchEvent(event);
    }