java - 在 SomeView 类 onDrawBitmap 方法中使位图适合屏幕

标签 java android bitmap android-canvas android-bitmap

首先,它不仅仅是将位图缩放到所有屏幕。它不是重复的。我搜索了一下。

我有一个名为 SomeView 的类,我在 MainActivity 上调用此 SomeView 类,如下所示;

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

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

我的查看 Activity 代码。 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);
    }

最佳答案

这是解决方案。

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

关于java - 在 SomeView 类 onDrawBitmap 方法中使位图适合屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692358/

相关文章:

android - 在 EditText 中仅设置某些数字 - Android

Java List.add() 方法添加一个可修改的对象

java - 是什么让最新版本的 JVM 更快?

java - 使用java 8 sdk播放声音

c++ - 优化 c++ 矩阵/位图类

java - 在从独立相机捕获的图像上绘制文本(时间戳)

delphi - 在 GetObject() 调用后,Graphics.TBitmap 成功从 JPEG 帧解码导致空 TDibSection

java - 无法从 CursorWindow 读取第 0 行,第 9 列

android - 在没有广播接收器的情况下找出蓝牙状态?

Android - 服务 - 启动命令仅调用一次