Android: hoe attributen in ondraw () wijzigen met onclickListener

Ik heb een eenvoudige functie ondraw ().

private class MyViewCircle extends View {
        public MyViewCircle(Context context) {
            super(context);
           //TODO Auto-generated constructor stub
        }
        @Override
        protected void onDraw(Canvas canvas) {
           //TODO Auto-generated method stub
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.BLACK);
            canvas.drawCircle(20, 20, 50,
                    paint);
        }
    }

Het werkt goed. Maar ik wil het interessanter. Ik maak een onclickListener. evolve.setOnClickListener (new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           //TODO Auto-generated method stub
            //How to change attributes?
        }
    });

Wanneer ik op de knop klik, worden de kenmerken gewijzigd. Verander bijvoorbeeld naar

paint.setColor(Color.BLUE);
canvas.drawCircle(30, 30, 50,paint);

Mijn vraag is: hoe kan ik dit implementeren? Wanneer ik op de knop klik, wordt de afbeelding automatisch opnieuw gegenereerd. Bedankt!

0

2 antwoord

je zou enkele variabelen kunnen instellen om daar attributen voor te representeren, bijvoorbeeld, in jouw geval kun je een n int voor de kleur instellen, en drie zweven voor de coördinaten van het midden en de straal.

in uw onClick() -methode, wijzigt de waarden van hun variabelen en roept vervolgens invalid() op om de afbeelding opnieuw te tekenen.

0
toegevoegd

U kunt een ledvariabele gebruiken om de status op te slaan, deze te wijzigen onClick , en deze in onDraw aan te vinken.

Om de klikgebeurtenis goed aan te sluiten, moet u in uw constructor setOnClickListener aanroepen en invalideren in onClick om opnieuw te tekenen.

private class MyCircle extends View implements OnClickListener {
  private boolean mDrawBlueCircle = false;
  private Paint mPaint = new Paint();

  public MyCircle(Context context) {
    super(context);
    setOnClickListener(this);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    float x = 20;
    float y = 20;
    float r = 50;
    int color = Color.BLACK;
    if (mDrawBlueCircle) {
      x = 30;
      y = 30;
      color = Color.BLUE;
    }
    mPaint.setColor(color);
    canvas.drawCircle(x, y, r, mPaint);
  }

  @Override
  public void onClick(View v) {
    mDrawBlueCircle = true;
    invalidate();
  }
}

Merk op dat ik ook de Paint opsla in een ledenvariabele mPaint . Dit voorkomt dat er nieuwe objecten worden gemaakt op elke trekkingscyclus en vermindert de garbage collection.

0
toegevoegd