Android, рисование из основной деятельности - PullRequest
3 голосов
/ 24 января 2012

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

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
        }
    }
}

Помощь будет высоко ценится.

Ответы [ 4 ]

2 голосов
/ 24 января 2012

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

определить Rect r = new 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());
}
1 голос
/ 24 января 2012

Вы можете создать прослушиватель рисования:

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
    }
});

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

0 голосов
/ 24 января 2012
    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);
    }
0 голосов
/ 24 января 2012

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

@Override
public void onDraw(Canvas canvas

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

...