我有一个程序,可以让我用手指移动图像。 我的问题是这些图像中的某些已在我的.xml文件中旋转,如果它们不是直线,我的程序将无法移动它们。 如果您需要更多信息,我们将很乐意为您提供帮助,如果您对我的问题有解决方案,请先谢谢您。
这是我的.xml文件的一部分(一直都是同一件事):
<ImageView
android:id="@+id/carte2"
android:layout_width="100dp"
android:layout_height="120dp"
android:layout_marginStart="12dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="1dp"
android:src="@drawable/carte_arriere"
app:layout_constraintLeft_toLeftOf="@id/carte1"
app:layout_constraintTop_toTopOf="@id/carte1"
android:rotation="186.923"
/>
<ImageView
android:id="@+id/carte3"
android:layout_width="100dp"
android:layout_height="120dp"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="3dp"
android:src="@drawable/carte_arriere"
app:layout_constraintLeft_toLeftOf="@id/carte1"
app:layout_constraintTop_toTopOf="@id/carte1"
android:rotation="193.846"
/>
<ImageView
android:id="@+id/carte4"
android:layout_width="100dp"
android:layout_height="120dp"
android:layout_marginStart="36dp"
android:layout_marginLeft="36dp"
android:layout_marginTop="7dp"
android:src="@drawable/carte_arriere"
app:layout_constraintLeft_toLeftOf="@id/carte1"
app:layout_constraintTop_toTopOf="@id/carte1"
android:rotation="200.769"
/>
这是我的JAVA文件的一部分(也总是一样):
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import ch.maxbi.haveadrink.main.ListeJeuxActivity;
import ch.maxbi.haveadrink.R;
public class Jeu5 extends AppCompatActivity /*implements View.OnTouchListener, GestureDetector.OnGestureListener, View.OnDragListener, GestureDetector.OnDoubleTapListener*/ {
private static final String TAG = "Jeu5";
Button back_second_page;
ImageView essai_mouvement = null, essai_mouvement1 = null, essai_mouvement2 = null, essai_mouvement3 = null, essai_mouvement4 = null, essai_mouvement5 = null, essai_mouvement6 = null, essai_mouvement7 = null;
ImageView essai_mouvement8 = null;
private GestureDetector mGestureDetector;
float x, y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jeu5);
this.back_second_page = (Button) findViewById(R.id.back_second_page);
back_second_page.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent back_second_page = new Intent(getApplicationContext(), ListeJeuxActivity.class);
startActivity(back_second_page);
finish();
}
});
essai_mouvement = findViewById(R.id.carte1);
essai_mouvement1 = findViewById(R.id.carte2);
essai_mouvement2 = findViewById(R.id.carte3);
essai_mouvement3 = findViewById(R.id.carte4);
essai_mouvement4 = findViewById(R.id.carte5);
essai_mouvement5 = findViewById(R.id.carte6);
essai_mouvement6 = findViewById(R.id.carte7);
essai_mouvement7 = findViewById(R.id.carte8);
essai_mouvement8 = findViewById(R.id.carte9);
//essai_mouvement.setOnTouchListener(this);
/*mGestureDetector = new GestureDetector(this,this);*/
essai_mouvement.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
essai_mouvement.setRotation(0);
x = event.getX();
y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float movedX, movedY;
movedX = event.getX();
movedY = event.getY();
float distanceX = movedX - x;
float distanceY = movedY - y;
essai_mouvement.setX(essai_mouvement.getX()+distanceX);
essai_mouvement.setY(essai_mouvement.getY()+distanceY);
break;
}
return true;
}
});
essai_mouvement1.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
essai_mouvement1.setRotation(0);
x = event.getX();
y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float movedX, movedY;
movedX = event.getX();
movedY = event.getY();
float distanceX = movedX - x;
float distanceY = movedY - y;
essai_mouvement1.setX(essai_mouvement1.getX()+distanceX);
essai_mouvement1.setY(essai_mouvement1.getY()+distanceY);
break;
}
return true;
}
});
essai_mouvement2.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
essai_mouvement2.setRotation(0);
x = event.getX();
y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float movedX, movedY;
movedX = event.getX();
movedY = event.getY();
float distanceX = movedX - x;
float distanceY = movedY - y;
essai_mouvement2.setX(essai_mouvement2.getX()+distanceX);
essai_mouvement2.setY(essai_mouvement2.getY()+distanceY);
break;
}
return true;
}
});
在“ essai_mouvement.setOnClickListener”中,我添加了setRotation(0),因为这样我仍然可以移动卡,但是我想不拉直就移动它们。