Wie erhalte ich die X- und Y-Koordinaten eines Bildes in einer Bildansicht in Android?Android

Forum für diejenigen, die für Android programmieren
Guest
 Wie erhalte ich die X- und Y-Koordinaten eines Bildes in einer Bildansicht in Android?

Post by Guest »

Ich stecke in diesem Problem fest. Ich habe eine Bildansicht und möchte die Position meiner Berührung nur innerhalb des Bildes erhalten. Wenn ich das Bild verlasse, muss ich x=0 und y=0 anzeigen. In dieser App muss ich die Größe ändern, zoomen und drehen können, die Funktionen sind festgelegt, aber ich habe nur Probleme mit den Koordinaten des Bildes innerhalb des Bildes.

Hier ist ein Link, was ich meine, Link

Das ist das gleiche Problem, das ich zu lösen versuche: Wie man die Koordinaten X,Y eines Bildes nach dem Zoomen und Schwenken erhält

Vielen Dank.

Ondrej

Hier ist mein Code:

Code: Select all

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);
}
< /code>

und Main.xml sehen aus wie: < /p>







Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post