2014-11-29 4 views
0

У меня есть расширенный вид использования холста. Я рисую основные рисунки в методе onDraw(), когда пользователь касается на холсте, мне нужно нарисовать изображение, потому что я использовал canvas внутри метода onTouchEvent(), он ничего не рисует, код приведен ниже, в чем проблема и как я могу решить эту проблемухолст не рисование изображений по другому методу

public class ScreenView extends View(){ 

    static Canvas canvas; 
    Bitmap bm; 

    protected void onDraw(final Canvas canvas) { 
     super.onDraw(canvas); 
     this.canvas = canvas; 
     bm = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ic_launcher); 

     canvas.draw....... 
     ...... 
     ........... 


    } 
    public boolean onTouchEvent(final MotionEvent event) { 

     handleTouches(event.getX(), event.getY()); 

     return false; 
    } 
    public void handleTouches(float x, float y) { 
     xLocTouch = (int) x; 
     yLocTouched = (int) y; 
     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     canvas.drawBitmap(bm, xLocTouch ,yLocTouched , paint); 
    } 
} 
+0

Вы можете использовать Canvas только в методе onDraw (и связанный с ним: dispatchDraw(), draw()) – pskink

ответ

0

вы должны вызвать invalidate() метод внутри onTouchEvent, то ваш метод onDraw() будет называться, и вы просто должны хранить x и y координаты, а затем сделать растровое это координаты, такие как:

public class ScreenView extends View { 
    int xLocTouched; 
    int yLocTouched; 
    Bitmap bm; 

    protected void onDraw(final Canvas canvas) { 
     super.onDraw(canvas); 
     bm = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ic_launcher); 

     //your basic drawings also should depends on xLocTouched and yLocTouched. 

     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     canvas.drawBitmap(bm, xLocTouched ,yLocTouched , paint); 

    } 

    public boolean onTouchEvent(final MotionEvent event) { 
     xLocTouched = (int) event.getX(); 
     yLocTouched = (int) event.getY(); 

     invalidate(); 

     return false; 
    } 
} 
+0

, но если бы я коснулся дважды предыдущих данных касания, они потеряются с холста. Могу ли я сохранить старые данные и снова перерисовать? – programr

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