Java 在SomeView类onDrawBitmap方法中将位图适配到屏幕
首先,它不仅仅是将位图缩放到所有屏幕。它不是复制品。我找过了 我有一个名为SomeView的类,我把这个SomeView类称为MainActivitylikeJava 在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
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);