Im делает приложение для рисования на растровом изображении, и его попросили несколько раз, прежде чем на SO как here и hereBizarre сенсорный координаты
Я использовал их в мое приложение, и никто, казалось, не работать, вот код, у меня есть используется:
public class EditActivity extends Activity implements OnTouchListener,
OnClickListener {
GestureDetector gd;
View.OnTouchListener gl;
RelativeLayout parent;
ImageView im;
Bitmap bmp;
Bitmap alteredBitmap;
Canvas canvas;
Paint paint;
Matrix matrix;
Rect imageBounds;
Path mPath;
int dw;
int dh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
parent = (RelativeLayout) findViewById(R.id.rl);
matrix = new Matrix();
parent.setBackgroundColor(Color.BLACK);
gd = new GestureDetector(this, new MyGestureDetector());
gl = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mPath.moveTo(x,y);
im.invalidate();
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(x,y);
im.invalidate();
break;
case MotionEvent.ACTION_UP:
// canvas.drawPath(mPath, paint);
mPath.reset();
im.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return gd.onTouchEvent(event);
} else {
return gd.onTouchEvent(event);
}
}
};
im = (ImageView) findViewById(R.id.ImageView);
Uri imageFileUri = Uri.parse(getIntent().getStringExtra("uri"));
Display currentDisplay = getWindowManager().getDefaultDisplay();
dw = currentDisplay.getWidth();
dh = currentDisplay.getHeight();
try {
// Load up the image's dimensions not the image itself
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageFileUri), null, bmpFactoryOptions);
alteredBitmap = Bitmap.createBitmap(bmp.getWidth(),
bmp.getHeight(), bmp.getConfig());
mPath = new Path();
canvas = new Canvas(alteredBitmap);
paint = new Paint(Paint.SUBPIXEL_TEXT_FLAG);
paint.setFlags(Paint.DEV_KERN_TEXT_FLAG);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setFilterBitmap(true);
paint.setDither(true);
paint.setAntiAlias(true);
paint.setTextSize(40f);
paint.setTypeface(getTypeFaceFromFile("Roboto-Light"));
canvas.drawBitmap(bmp, matrix, paint);
canvas.save();
im.setImageBitmap(alteredBitmap);
im.setOnClickListener(this);
im.setOnTouchListener(gl);
} catch (FileNotFoundException e) {
Log.v("ERROR", e.toString());
}
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent event) {
return super.onDown(event);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
}
}
Теперь, как я рисую путь, нажав на экран, он просто рисует себя в другом месте, и это происходит только в изображениях с пересчитаны самой андроида, а не на образы, которые достаточно малы чтобы поместиться без масштабирования, пожалуйста, изучите его и помогите мне
EDIT: Я следовал за этим answer, и это мой код после реализации, но Тереза нет пути в настоящее время ....
gl = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
float scaledImageOffsetX = x - imageBounds.left;
float scaledImageOffsetY = y - imageBounds.top;
float originalImageOffsetX = scaledImageOffsetX * widthRatio;
float originalImageOffsetY = scaledImageOffsetY * heightRatio;
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mPath.moveTo(originalImageOffsetX,originalImageOffsetY);
im.invalidate();
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(originalImageOffsetX,originalImageOffsetY);
im.invalidate();
break;
case MotionEvent.ACTION_UP:
// canvas.drawPath(mPath, paint);
mPath.reset();
im.invalidate();
break;
default:
break;
}
return true;
}
}
};
im = (ImageView) findViewById(R.id.ImageView);
Uri imageFileUri = Uri.parse(getIntent().getStringExtra("uri"));
Display currentDisplay = getWindowManager().getDefaultDisplay();
dw = currentDisplay.getWidth();
dh = currentDisplay.getHeight();
try {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageFileUri), null, bmpFactoryOptions);
alteredBitmap = Bitmap.createBitmap(bmp.getWidth(),
bmp.getHeight(), bmp.getConfig());
mPath = new Path();
canvas = new Canvas(alteredBitmap);
paint = new Paint(Paint.SUBPIXEL_TEXT_FLAG);
paint.setFlags(Paint.DEV_KERN_TEXT_FLAG);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setFilterBitmap(true);
paint.setDither(true);
paint.setAntiAlias(true);
paint.setTextSize(40f);
paint.setTypeface(getTypeFaceFromFile("Roboto-Light"));
canvas.drawBitmap(bmp, matrix, paint);
canvas.save();
im.setImageBitmap(alteredBitmap);
Drawable drawable = im.getDrawable();
imageBounds = drawable.getBounds();
float intrinsicHeight = drawable.getIntrinsicHeight();
float intrinsicWidth = drawable.getIntrinsicWidth();;
float scaledHeight = imageBounds.height();
float scaledWidth = imageBounds.width();
heightRatio = intrinsicHeight/scaledHeight;
widthRatio = intrinsicWidth/scaledWidth;
im.setOnClickListener(this);
im.setOnTouchListener(gl);
} catch (FileNotFoundException e) {
Log.v("ERROR", e.toString());
}
}
}
Спасибо, Джит
Вам нужно для масштабирования координат, как описано в первом ответе на этот вопрос: http://stackoverflow.com/questions/4933612/how-to-convert-coordinates-of-the-image-view-to-cordinates-of- the-bitmap – ethan
Я следил за ним, я также связал его с моими вопросами первой строкой, но в моем случае это не работает – Jeet
. В этом ответе установка originalImageOffsetX и originalImageOffsetY ничего не показывает при касании – Jeet