Я новичок в Android и в настоящее время занимаюсь исследованиями в Android.Я столкнулся с проблемой при рисовании линии или другого объекта в верхней части изображения.
Моя ситуация такова: я рисую изображение на imageView
с использованием метода setImageBitmap
.Теперь я собираюсь добавить строку или другой объект поверх него.Я нашел несколько статей, описывающих, что я могу переопределить метод onDraw
, но когда я делаю это и рисую свое изображение, используя метод canvas.drawBitmap
, на моем imageView
появляются два изображения.Они рисуют друг над другом.
Как я могу нарисовать только одно изображение?
Какие-нибудь подсказки или, возможно, ссылка, описывающая это?
Вот код:
public void draw () {
// Declaration output pixels vector
int[] outputPixels = new int[mImage.getDataLength()];
// Get the gray scale window width
int windowWidth = mDICOMViewerData.getWindowWidth();
// Compute the window offset x the number of gray levels (256)
int windowOffset = ((2 * mDICOMViewerData.getWindowCenter() - windowWidth)) / 2;
switch(mDICOMViewerData.getCLUTMode()) {
case CLUTMode.NORMAL:
computeGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
break;
case CLUTMode.INVERSE:
computeInverseGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
break;
case CLUTMode.RAINBOW:
computeRainbowRGBImage(windowWidth, windowOffset, outputPixels);
break;
};
// Create the bitmap
Bitmap imageBitmap = Bitmap.createBitmap(outputPixels, mImage.getWidth(),
mImage.getHeight(), Bitmap.Config.ARGB_8888);
// Check if image is to be rotated 90 degrees
if (mIsRotate) {
Matrix m = new Matrix();
m.postRotate(90);
imageBitmap = Bitmap.createBitmap(imageBitmap,
0, 0, mImage.getWidth(), mImage.getHeight(),
m, true);
}
// Set the image
setImageBitmap(imageBitmap);
}
Этот код был вызван из другого класса.
и здесь переопределение метода onDraw
public void onDraw (Canvas canvas) {short toolMode = mDICOMViewerData.getToolMode ();if (toolMode == ToolMode.MEASURE) {if (this.getImage ()! = null) {for (Point point: points) {canvas.drawCircle (point.x, point.y, 1, paint);}
int[] outputPixels = new int[mImage.getDataLength()];
// Get the gray scale window width
int windowWidth = mDICOMViewerData.getWindowWidth();
// Compute the window offset x the number of gray levels (256)
int windowOffset = ((2 * mDICOMViewerData.getWindowCenter() - windowWidth)) / 2;
switch(mDICOMViewerData.getCLUTMode()) {
case CLUTMode.NORMAL:
computeGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
break;
case CLUTMode.INVERSE:
computeInverseGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
break;
case CLUTMode.RAINBOW:
computeRainbowRGBImage(windowWidth, windowOffset, outputPixels);
break;
};
// Create the bitmap
Bitmap imageBitmap = Bitmap.createBitmap(outputPixels, mImage.getWidth(),mImage.getHeight(), Bitmap.Config.ARGB_8888);
//drawing image here
canvas.drawBitmap(imageBitmap, 153, 0, null);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 400, 400, paint);
super.onDraw(canvas);
}
}
}