аннулировать работает только в пользовательском представлении - PullRequest
0 голосов
/ 12 апреля 2011

, поэтому я создал представление, называемое "отображаемое представление"

 class DrawableView extends View{
        Context mContext;

        int touches=0,k,Xoffs,clicks=0;


  double x_1 = 0,x_2=0;

        private float mLastTouchX, mLastTouchY;

        public DrawableView(Context context) {
        super(context);
        mContext = context;
        }

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

        Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

canvas.drawColor(Color.BLUE);
myPaint.setColor(Color.WHITE);

canvas.drawCircle(200, 100, 20, myPaint);


    }

..... more code....

}

и его можно сделать недействительным только в команде ondraw! то есть: вызов "invalidate ();" в конце команды ondraw вызывает цикл.

Я много раз пытался вызвать g_draw.invalidate (); или g_draw.postInvalidate (); (g_draw - имя созданного Drawable View) из других классов и даже основного класса активности, и это не работает. почему и как я могу это исправить?

спасибо

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Возможно, вы захотите вызвать invalidate () где-нибудь в вашем классе DrawableView.Например, если вы хотите, чтобы ваш вид перерисовывался после любого события касания, вы должны сделать что-то вроде этого:

public boolean onTouchEvent( MotionEvent event) {

    if(event.getAction() == MotionEvent.ACTION_UP){
        invalidate();
    }
}

Вот как я рисую подвижные фигуры в моей игре-головоломке.

0 голосов
/ 12 апреля 2011

Если вы хотите непрерывный вызов onDraw, попробуйте сделать это в другом потоке.Создайте поток, и из его метода запуска попробуйте выполнить postInvalidate.

Это всегда работало для меня.

Другое дело, что когда вы рисуете круг один раз, в следующий раз не будет никакого значения -будет выглядеть так же.

...