Как получить координаты X и Y изображения внутри изображения в Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить координаты X и Y изображения внутри изображения в Android?

Сообщение Anonymous »

Я застрял в этой проблеме. У меня есть imageView, и я хотел бы получить информацию о положении моего прикосновения только внутри изображения. Когда я касаюсь изображения, я должен отобразить x=0 и y=0. В этом приложении я должен уметь изменять размер, масштабировать и поворачивать изображение, функции фиксированы, но у меня проблема с координатами изображения только внутри изображения.

Вот ссылка, о чем я говорю

Это та же проблема, которую я пытаюсь решить: как получить координаты X,Y изображения после масштабирования и панорамирования

Большое спасибо.

Ондрей

Вот мой код:

public class Sample extends Activity{
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;

Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();

PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;

int[] location = new int[2];

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final ImageView image = (ImageView) findViewById(R.id.mapView);

final Bitmap icon = BitmapFactory.decodeResource(this.getResources(),
R.drawable.mapa);
image.setImageBitmap(icon);

image.setOnTouchListener(new View.OnTouchListener()
{

public boolean onTouch(View v, MotionEvent event)
{
final ImageView view = (ImageView) v;

switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
RectF r = new RectF();
matrix.mapRect(r);

break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG)
{
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x,
event.getY() - start.y);
} else if (mode == ZOOM)
{
float newDist = spacing(event);
if (newDist > 10f)
{
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f)
{
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;

}

// Perform the transformation
view.setImageMatrix(matrix);
return true;
}
});
}

private float spacing(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}

private void midPoint(PointF point, MotionEvent event)
{
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}


И main.xml выглядит так:









Подробнее здесь: https://stackoverflow.com/questions/115 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»