Подгонка растрового изображения к экрану в методе класса SomeView onDrawBitmap - PullRequest
0 голосов
/ 09 декабря 2018

Во-первых, речь идет не только о масштабировании растрового изображения на весь экран.Это не дубликат.Я искал это.

У меня есть класс с именем SomeView, и я вызываю этот Класс SomeView на MainActivity like;

    setContentView(new SomeView(MainActivity.this, bitmap ));

Bitind от Sendind Bitcoр от MainActivity.

И я загружаю изображение, используя

  canvas.drawBitmap(bitmap, 0, 0, null);

Я тоже пробовал.

 RectF dest = new RectF(0,0,getWidth(),getHeight());
  canvas.drawBitmap(bitmap, null, dest, null);

, а также пытался ..

 RectF dest = new RectF(0,0,bitmap.getWidth(),bitmap.getHeight());
      canvas.drawBitmap(bitmap, null, dest, null);

Но у меня ничего не работает ... Предстоящий растр не подходит к экрану и не подходит к центру.

Что у меня есть ..

enter image description here

Что мне нужно.

enter image description here

My View Коды активности.SomeView.Java

  public SomeView(Context c, Bitmap b) {
        super(c);

        bitmap = b;
        mContext = c;
        setFocusable(true);
        setFocusableInTouchMode(true);

        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setPathEffect(new DashPathEffect(new float[] { 10, 20 }, 0));
        paint.setStrokeWidth(15);
        paint.setColor(Color.GREEN);


        this.setOnTouchListener(this);
        points = new ArrayList<Point>();

        bfirstpoint = false;
    }

    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        setFocusable(true);
        setFocusableInTouchMode(true);

        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setColor(Color.WHITE);

        this.setOnTouchListener(this);
        points = new ArrayList<Point>();
        bfirstpoint = false;

    }

    public void onDraw(Canvas canvas) {

        canvas.drawBitmap(bitmap, 0, 0, null);

        Path path = new Path();
        boolean first = true;

        for (int i = 0; i < points.size(); i += 2) {
            Point point = points.get(i);
            if (first) {
                first = false;
                path.moveTo(point.x, point.y);
            } else if (i < points.size() - 1) {
                Point next = points.get(i + 1);
                path.quadTo(point.x, point.y, next.x, next.y);
            } else {
                mlastpoint = points.get(i);
                path.lineTo(point.x, point.y);
            }
        }
        canvas.drawPath(path, paint);
    }

1 Ответ

0 голосов
/ 09 декабря 2018

Вот решение.

RectF src = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF dst = new RectF(0, 0, getWidth(), getHeight());

matrix = new Matrix();
matrix.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER);

Log.d(TAG, "MATRIX VALUE: " + matrix);

canvas.drawBitmap(bitmap, matrix, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...