2012-01-24 8 views
3

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

public class TestActivity extends Activity { 
    DrawView drawing; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ViewGroup myLayout = (ViewGroup) findViewById(R.id.mainLayout); 

     drawing = new DrawView(this); 
     myLayout.addView(drawing); 

     drawing.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        // draw a square 
       } 
       return true; 
      } 
     }); 
    } 

    private class DrawView extends View { 

     public DrawView(Context context) { 
      super(context); 
     } 

     protected void onDraw(Canvas canvas) { 
      Paint myPaint = new Paint(); 
      myPaint.setColor(Color.BLACK); 
      // draw a circle 
     } 
    } 
} 

Справка была бы очень признательна.

ответ

2

здесь является простой фрагмент кода для рисования прямоугольника когда пользователь вниз, двигаться и вверх касания слушателя огня, просто переопределить в классе DrawView не setOnTouchListener()

определить Rect г = новый Rect() в классе DrawView затем после реализации этого кода в классе DrawView

public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     sx = event.getX(); 
     sy = event.getY(); 
     r.set(sx,sy,sx,sy); 
    }else if(event.getAction==MotionEvent.ACTION_UP){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    }else if(event.getAction==MotionEvent.ACTION_MOVE){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    } 
    invalidate(); 
    return true; 

}

вот OnDraw()

public void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    canvas.drawRect(r, new Paint()); 
} 
+0

Я думаю, что я получил это, чтобы работать, однако, есть способ рисовать круг, а затем рисовать квадрат без удаления круга? То есть Сначала нарисован круг, пользователь нажимает, а затем появляется квадрат, отображаются квадрат и круг. Я посмотрел на google, мне нужно иметь какой-то массив, чтобы следить за тем, что было нарисовано и перерисовывать все каждый раз? то есть 'Shapes [] ShapesDrawn = {circle, square, triangle, square}', поместить его в цикл for в методе onDraw? – 1user1160804

0

Вы должны переписать исходную функцию класса:

@Override 
public void onDraw(Canvas canvas 

Чтобы заставить рисунок, используйте viewObject.invalidate()

0
mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setColor(Color.GREEN); 
    mPaint.setStyle(Paint.Style.STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(5); 


    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 
1

Вы можете создать раздаточный слушателя:

public interface OnDrawListener { 
    void onDraw(Canvas c); 
} 

... 

private class DrawView extends View { 
    private OnDrawListener onDrawListener; 

    public void setOnDrawListener(OnDrawListener onDrawListener) { 
     this.onDrawListener=onDrawListener; 
    } 

    @Override 
    protected void onDraw(Canvas c) { 
     onDrawListener.onDraw(c); 
    } 
} 

, а затем редактировать переопределения слушателя:

// onCreate 
drawing.setOnDrawListener(new OnDrawListener() { 
    @Override 
    public void onDraw(Canvas c) { 
     // draw circle 
    } 
}); 

, а затем снова с событием касания и переопределить его, чтобы нарисовать квадрат.

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