Я создаю графический редактор для Android, приложение будет содержать некоторые функции, одна из которых рисует линию (размер и цвет bru sh не имеют значения).
I уже выполнили линии, но, похоже, возникла проблема с onTouchEvent или инициалом растрового изображения.
Процесс выглядит следующим образом: пользователь нажимает кнопку -> пользователь выбирает изображение из галереи -> изображение загружается в ImageView и изменяется как растровое изображение
. Проблема заключается в следующем: при попытке нарисовать линию на экране событие касания «поворачивается» к указанному c месту в приложении. , как показано на связанном изображении ниже: https://www.imageupload.net/image/error.xlbW5
Теперь, чтобы показать некоторый код .. Вот как я определил свой ImageView (ничего необычного):
<ImageView
android:layout_width="match_parent"
android:layout_height="500dp"
android:id="@+id/ChoosenImageView">
</ImageView>
Мой код для загрузки изображения по растровому изображению:
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
Uri imageFileUri = intent.getData();
try {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpFactoryOptions);
bmpFactoryOptions.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpFactoryOptions);
alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp
.getHeight(), bmp.getConfig());
canvas = new Canvas(alteredBitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(15);
matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);
choosenImageView.setImageBitmap(alteredBitmap);
choosenImageView.setOnTouchListener(this);
} catch (Exception e) {
Log.v("ERROR", e.toString());
}
}
}
My onTouch:
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
choosenImageView.invalidate();
downx = upx;
downy = upy;
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
choosenImageView.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
Спасибо