Как нарисовать изображение из нарисованного на просмотр изображений с помощью Canvas - Android - PullRequest
4 голосов
/ 28 ноября 2011

У меня есть активность, в которой есть ImageView.Я хочу рисовать там, где пользователь прикасается к этому Imageview, с изображением из папки для рисования.Я читал, что лучше всего использовать Canvas, но я не уверен, где и как я интегрирую метод onDraw с onTouchListener.Это то, что у меня есть до сих пор:

public class Main extends Activity
{
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      final TextView textView = (TextView)findViewById(R.id.textView);
      final ImageView image = (ImageView) findViewById(R.id.imageView2);

      //Bitmap
      Bitmap viewBitmap = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.Config.ARGB_8888);
      Canvas canvas = new Canvas(viewBitmap);
      image.draw(canvas);

      image.setOnTouchListener(new View.OnTouchListener()
      {
         @Override
         public boolean onTouch(View v, MotionEvent event)
         {
            textView.setText("Touch coordinates : " + String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
            return false;
         }
      });
   }
}

Так что я хочу сделать, когда пользователь касается ImageView, изображение будет нарисовано именно там, где он коснулся его.

1 Ответ

2 голосов
/ 29 ноября 2011

Вы захотите создать подкласс ImageView, чтобы переопределить его onDraw() метод.Таким образом, вы также можете настраивать сенсорную обработку в onTouchEvent() вместо того, чтобы присоединять слушателя.Это не полный пример, но что-то вроде следующего:

public class CustomImageView extends ImageView {

    private ArrayList<Point) mTouches;
    private Bitmap mMarker;

    //Java constructor
    public CustomImageView(Context context) {
        super(context);
        init();
    }

    //XML constructor
    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        mTouches = new ArrayList<Point>();
        mMarker = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_marker_image);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //Capture a reference to each touch for drawing
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            mTouches.add( new Point(event.getX(), event.getY()) );
            return true;
        }

        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas c) {
        //Let the image be drawn first
        super.onDraw(c);

        //Draw your custom points here
        Paint paint = new Paint();            
        for(Point p : mTouches) {
            c.drawBitmap(mMarker, p.x, p.y, paint);
        }
    }

}

HTH!

...