2013-09-27 4 views
0

Я пишу Android-аниматора.пытается изменить цвет через меню

это моя главная:

package com.example.hwpainterandfilemanager; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainPainter extends Activity { 
    MyPainter painter ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     painter = new MyPainter(getApplicationContext()); 
     setContentView(R.layout.activity_main_painter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main_painter, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch (item.getItemId()){ 

      case (R.id.Blue):{ 
       painter.mColor = Color.BLUE; 
       break; 
      } 

      case (R.id.Red):{ 
       painter.mColor=Color.RED; 
       break; 
      } 
      case (R.id.Yellow):{ 
       painter.mColor = Color.YELLOW; 
       break; 
      } 
      case (R.id.Green):{  
       painter.mColor = Color.GREEN; 
       break; 
      } 

     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Это MyPanter:

package com.example.hwpainterandfilemanager; 

import java.util.Vector; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 


public class MyPainter extends View { 



    Vector<MyDot> allDots; 
    int mColor; 
    Paint p ; 

    public MyPainter(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
     init(); 

    } 


    public MyPainter(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
     init(); 
    } 

    public MyPainter(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     init(); 
    } 

    public void init(){ 
     allDots = new Vector <MyDot>(); 

     mColor = Color.BLUE; 
    } 


    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 

     p= new Paint(); 
     p.setStrokeWidth(5); 

      for (int i =0 ; i<allDots.size();i++){ 
       p.setColor(allDots.get(i).mColor); 
       canvas.drawPoint(allDots.get(i).mX, allDots.get(i).mY, p); 
      } 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     int x,y; 

     if(MotionEvent.ACTION_DOWN==event.getAction() || MotionEvent.ACTION_MOVE==event.getAction()){ 
      x= (int) event.getX(); 
      y= (int) event.getY(); 
      MyDot tmp; 
      tmp = new MyDot(x, y, mColor); 

      Log.i("Painter Color", "" + mColor); 
      allDots.add(tmp); 

      invalidate(); 

      } 


     // TODO Auto-generated method stub 
     return true; 
    } 

} 

и MyDot класс:

package com.example.hwpainterandfilemanager; 

public class MyDot { 


     int mX =0; 
     int mY =0; 
     int mColor; 

     public MyDot (int x, int y, int color) { 
      mX=x; 
      mY=y; 
      mColor = color; 
     } 
    } 

при попытке изменить цвет с синего на любой другой цвет цвет не изменится и останется неизменным.

Единственный способ, с которым я нахожу работу, - установить mColor как статический, но это не так, как я хочу решить эту проблему.

Что мне не хватает?

thx, Avner.

ответ

0

Вы создаете два экземпляра класса Painter, и вы обновляете неправильный экземпляр. Проблема заключается в активности MyPainter. Изменить это:

painter = new MyPainter(getApplicationContext()); 
    setContentView(R.layout.activity_main_painter); 

в этом:

painter = new MyPainter(getApplicationContext()); 
    setContentView(painter); 
+0

как я пропускал это :) вау !!! ТНХ спас мой день :) – Avner

Смежные вопросы