Я реализовал функцию масштабирования и перетаскивания, которая отлично работает, между тем я столкнулся с проблемой, что, как только заканчивается перетаскивание, изображения возвращаются в правый нижний угол. Ниже приведен код, который я использую для перетаскивания. Можете ли вы посоветовать мне, как контролировать/запоминать мою последнюю затащенную позицию.Изображения теряют свою позицию в Рамочной/Относительной компоновке после того, как пользователь закончил перетаскивание
frameLayout = (FrameLayout) findViewById(R.id.relativeLayout);
frameLayout.setDrawingCacheEnabled(true);
frameLayout.buildDrawingCache();
bm = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
frameLayout.draw(c);
frameLayout.setOnTouchListener(this);`
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
if (x < 0) {
img_must_cities.setX(0);
img_must_cities.setY(y);
img_road_names.setX(0);
img_road_names.setY(y);
x = 0;
Toast.makeText(getApplicationContext(), "x=0", Toast.LENGTH_SHORT).show();
}
if (y < 0) {
img_must_cities.setY(0);
img_must_cities.setX(x);
img_road_names.setY(0);
img_road_names.setX(x);
y = 0;
Toast.makeText(getApplicationContext(), "y=0", Toast.LENGTH_SHORT).show();
}
if (x > bm.getWidth()) {
x = bm.getWidth() - 20;
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
Toast.makeText(getApplicationContext(), "x=bitmap.maxwidth(}", Toast.LENGTH_SHORT).show();
}
if (y > bm.getHeight()) {
y = bm.getHeight() - 20;
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
Toast.makeText(getApplicationContext(), "y=bitmap.maxheight(}", Toast.LENGTH_SHORT).show();
}
if (x > 0 && x < bm.getWidth() && y > 0 && y < bm.getHeight()) {
int action = event.getAction();
int pixel = bm.getPixel((int) x, (int) y);
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y));
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
inRed = Color.red(pixel);
inBlue = Color.blue(pixel);
inGreen = Color.green(pixel);
Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue);
break;
}
case MotionEvent.ACTION_MOVE: {
Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y));
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
inRed = Color.red(pixel);
inBlue = Color.blue(pixel);
inGreen = Color.green(pixel);
Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue);
break;
}
}
}
if (x < 0 && x < bm.getWidth() && y < 0 && y < bm.getHeight()) {
int action = event.getAction();
int pixel = bm.getPixel((int) x, (int) y);
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y));
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
inRed = Color.red(pixel);
inBlue = Color.blue(pixel);
inGreen = Color.green(pixel);
Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue);
break;
}
case MotionEvent.ACTION_MOVE: {
Log.e("COORDINATES", "Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y));
img_must_cities.setX(x);
img_must_cities.setY(y);
img_road_names.setX(x);
img_road_names.setY(y);
inRed = Color.red(pixel);
inBlue = Color.blue(pixel);
inGreen = Color.green(pixel);
Log.e("Colors", "R:" + inRed + " G:" + inGreen + " B:" + inBlue);
break;
}
}
}
return false;
}
Для «последней позиции» вы значите, когда падение пользователя изображения? –
@ Эрик Минарини, да, когда пользователь бросает изображение, он должен оставаться в том самом месте. Но в моем случае это как-то возвращается в правый нижний угол. – Umair