Ich versuche, zwei Bilder in einer Aktivität von 3 Variablen (gyroXaxis, gyroYaxis, gyroZaxis), die Aktualisierung jede Millisekunde Basis zu bewegen (so wird das Bild ständig bewegen). Die Bilder müssen innerhalb der Grenzen des Bildschirms bleiben, so dass auch die Implementierung einer Matrix erforderlich ist.Android Bild verschieben Innerhalb Bildschirm Grenzen
Ich habe versucht, die ImageView Drag Limitation In Android Frage, aber mein Setup ist ein bisschen anders.
Globale Variablen
ImageView imageView1;
ImageView imageView2;
// gyro float variables get updated every millisecond in a different function
float gyroXaxis;
float gyroYaxis;
float gyroZaxis;
private Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
PointF DownPT = new PointF();
PointF StartPT = new PointF();
OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_version);
// Create images
imageView1 = (ImageView) findViewById(R.id.image1);
Drawable drawableImage1 = getDrawable(R.drawable.image1);
imageView1.setImageDrawable(drawableChromoX);
imageView2 = (ImageView) findViewById(R.id.image2);
Drawable drawableImage2 = getDrawable(R.drawable.image2);
imageView2.setImageDrawable(drawableChromoY);
View.OnTouchListener listener = new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getTag() != null && v.getTag().equals("image1")) {
int eid = event.getAction();
switch (eid) {
case MotionEvent.ACTION_MOVE:
PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);
imageView1.setX((int) (StartPT.x + mv.x));
imageView1.setY((int) (StartPT.y + mv.y));
StartPT = new PointF(imageView1.getX(), imageView1.getY());
break;
case MotionEvent.ACTION_DOWN:
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF(imageView1.getX(), imageView1.getY());
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
}
else if (v.getTag() != null && v.getTag().equals("image2")) {
int eid = event.getAction();
switch (eid)
{
case MotionEvent.ACTION_MOVE :
PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);
imageView2.setX((int)(StartPT.x+mv.x));
imageView2.setY((int)(StartPT.y+mv.y));
StartPT = new PointF(imageView2.getX(), imageView2.getY());
break;
case MotionEvent.ACTION_DOWN :
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF(imageView2.getX(), imageView2.getY());
break;
case MotionEvent.ACTION_UP :
break;
default :
break;
}
}
return true;
}
};
imageView1.setOnTouchListener(listener);
imageView2.setOnTouchListener(listener);
}
ich wieder Empfehlen Sie hierfür eine Leinwand. –
@ Sub6Resources sind es Beispiele? – Pie
gibt es mehrere Tutorials, vor allem für Spiele, gibt, die helfen sollen Sie mit Surface vertraut zu machen, die im Wesentlichen eine Leinwand-Ansicht ist. Hier ist eine: https://www.simplifiedcoding.net/android-game-development-tutorial-surface-view/ –