Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SomeView类onDrawBitmap方法中将位图适配到屏幕_Java_Android_Bitmap_Android Canvas_Android Bitmap - Fatal编程技术网

Java 在SomeView类onDrawBitmap方法中将位图适配到屏幕

Java 在SomeView类onDrawBitmap方法中将位图适配到屏幕,java,android,bitmap,android-canvas,android-bitmap,Java,Android,Bitmap,Android Canvas,Android Bitmap,首先,它不仅仅是将位图缩放到所有屏幕。它不是复制品。我找过了 我有一个名为SomeView的类,我把这个SomeView类称为MainActivitylike setContentView(new SomeView(MainActivity.this, bitmap )); 从主活动发送位图。 我正在使用 canvas.drawBitmap(bitmap, 0, 0, null); 我也试过了 RectF dest = new RectF(0,0,getWidth(),getH

首先,它不仅仅是将位图缩放到所有屏幕。它不是复制品。我找过了

我有一个名为SomeView的类,我把这个SomeView类称为MainActivitylike

    setContentView(new SomeView(MainActivity.this, bitmap ));
从主活动发送位图。

我正在使用

  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);
但对我来说什么都不管用。。。即将到来的位图不适合屏幕,也不适合居中

我拥有的..

我需要什么。

我的视图活动代码。 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);
    }
publicsomeview(上下文c、位图b){
超级(c);
位图=b;
mContext=c;
设置聚焦(真);
setFocusableInTouchMode(真);
油漆=新油漆(油漆.防油漆别名标志);
绘制.设置样式(绘制.样式.笔划);
setPathEffect(新的DashPathEffect(新的float[]{10,20},0));
油漆。设置行程宽度(15);
油漆。设置颜色(颜色。绿色);
this.setOnTouchListener(this);
points=新的ArrayList();
bfirstpoint=false;
}
公共SomeView(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
设置聚焦(真);
setFocusableInTouchMode(真);
油漆=新油漆(油漆.防油漆别名标志);
绘制.设置样式(绘制.样式.笔划);
油漆。设置行程宽度(2);
油漆。设置颜色(颜色。白色);
this.setOnTouchListener(this);
points=新的ArrayList();
bfirstpoint=false;
}
公共空白onDraw(画布){
drawBitmap(位图,0,0,null);
路径路径=新路径();
布尔值优先=真;
对于(int i=0;i
以下是解决方案

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