我有一个使用毕加索库从URL加载图像的活动。
这个图像比屏幕大,这就是为什么在方法“OnTouch”中实现了一个代码,通过模拟地图来滚动图像。
Picasso.with(getApplicationContext()).load(url).into(imageView, new Callback() {
@Override
public void onSuccess() {
imageView.setVisibility(View.VISIBLE);
lineABmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
lineAMutBmp = lineABmp.copy(Bitmap.Config.RGB_565, true);
copy = Bitmap.createBitmap(lineAMutBmp);
canvas = new Canvas(copy);
imageView.setImageBitmap(copy);
}
});
private void drawBeacon() {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.MULTIPLY);
canvas.drawCircle(startX, startY, circle_radius, circle);
canvas.drawRect(startX - 50,//left
startY - 30, // top
startX + 50, //right
startY - 10, rect); //bottom
canvas.drawText(" Minor: " + beacon.getMinor(),
startX - 45,
startY - 15, text);
imageView.invalidate();
}
初始化油漆
init(){
circle = new Paint();
circle.setColor(Color.rgb(46, 204, 113));
circle.setStyle(Paint.Style.FILL);
circle.setStrokeWidth(10);
circle_radius = 10;
text = new Paint();
text.setColor(Color.BLACK);
text.setTextSize(16);
text.setFakeBoldText(true);
rect = new Paint();
rect.setColor(ContextCompat.getColor(getApplicationContext(), R.color.white_80));
rect.setStyle(Paint.Style.FILL_AND_STROKE); }
在这个方法中,我制作了缩放和拖动图像,并调用方法来绘制圆圈
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
view.setScaleType(ImageView.ScaleType.MATRIX);
float[] m = new float[9];
matrix.getValues(m);
float transX = m[Matrix.MTRANS_X] * -1;
float transY = m[Matrix.MTRANS_Y] * -1;
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: //first finger down only
savedMatrix.set(matrix);
if (draw) {
startX = Math.abs((event.getX() + transX) / scale);
startY = Math.abs((event.getY() + transY) / scale);
drawBeacon();
} else {
...
}
break;
case MotionEvent.ACTION_UP: //first finger lifted
case MotionEvent.ACTION_POINTER_UP: //second finger lifted
...
break;
case MotionEvent.ACTION_POINTER_DOWN: //second finger down
....
break;
case MotionEvent.ACTION_MOVE:
....
break;
}
} //perform the transformation.
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
终于自己动手了。我在方法中创建了一个位图副本
private void drawBeacon() {
Bitmap tmpBitmap = Bitmap.createBitmap(copyOriginal);
Canvas canvas = new Canvas(tmpBitmap);
....
bitmapLayers.add(1, tmpBitmap);
bt_delete.setVisibility(View.VISIBLE);
imageView.setImageBitmap(tmpBitmap);
draw = false;
}
我试图创建一个自定义视图,工作简单:有一个位图显示由弧路径-从0deg到360deg。度随着一些fps而变化。 我的问题是--如何设置模式以使其工作透明? 当然,是32位PNG,带有alpha通道。
在画布上画画是非常好的。即使橡皮擦也能工作得很好。问题是当画布保存为图像时,它画的是黑线,而不是橡皮擦。 为了更好地理解,我添加了屏幕、镜头和代码。 1.在擦除图的同时- 我不明白为什么橡皮移动被替换为黑色,而保存画布作为一个图像。
我正在运行Ubuntu 16.04。在Android Studio上,当我试图在模拟器中运行我的应用程序时,我得到以下错误: 致命的例外:主要过程:项目名称在这里,PID: 2528java.lang.运行时间例外:画布:试图绘制太大(216090000bytes)位图。在android.view.DisplayListCanvas.throw如果不能绘制(DisplayListCanvas.ja
我正在使用而不是将背景、边框和/或背景色应用到页面的某个区域(主要是因为需要页面来构建,而不需要。因为我的内容可能会持续几页)。问题是,如果坐标(x=0,y=0)意味着左下角,则图像的位置不会像预期的那样。我还想将画布定位到一个固定的位置,但是似乎不起作用。请参阅附上的原始图像和要定位在{x,y,width,height}={100f,100f,200f,200f}的图像,该图像应该在页面的底部(
问题内容: 如果我有画布,则可以在其上绘制如下的位图: 然后缩放位图: 我想获得比例尺后位图的位置。如果小数位数前的位置是(0,0),小数位数后的位置有一个偏移量,那么我需要该偏移量。如何获取? 谢谢你,很抱歉这个简单的问题,新手在这里… 问题答案: 好吧,让我们尝试为此制定最佳的公式 对于objectNewY也是一样。位图的新宽度和高度当然将是旧大小和比例的倍数。
我在画布上的撤消和重做操作有问题。我注意到,如果在Ondraw()方法中不使用canvas.drawbitmap,下面的代码可以工作,但是我需要绘制到位图,这样我就可以保存画布图像和加载图像。好心帮帮我。下面是我的代码。