android studio 开发 app ,四张图片,一张固定做为背景,另三张可以拖动,旋转,缩放的代码
时间: 2023-08-04 11:22:15 浏览: 40
你可以使用Android中的Drag and Drop API来实现拖动操作。以下是一个简单的示例:
首先在XML布局文件中添加一个ImageView来显示背景图片,然后添加另外三个ImageView来显示可拖动的图片:
```xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/background_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/background_image"/>
<ImageView
android:id="@+id/draggable_img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/draggable_image1"/>
<ImageView
android:id="@+id/draggable_img2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/draggable_image2"/>
<ImageView
android:id="@+id/draggable_img3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/draggable_image3"/>
</RelativeLayout>
```
然后在Java代码中,将ImageView设置为可拖动,并添加旋转和缩放操作。在这个示例中,我们使用了Android中的GestureDetector和ScaleGestureDetector类来实现这些操作:
```java
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
private ImageView backgroundImg, draggableImg1, draggableImg2, draggableImg3;
private int xDelta, yDelta;
private float rotationDegrees = 0f;
private float scale = 1f;
private float lastTouchX, lastTouchY;
private GestureDetector gestureDetector;
private ScaleGestureDetector scaleGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backgroundImg = findViewById(R.id.background_img);
draggableImg1 = findViewById(R.id.draggable_img1);
draggableImg2 = findViewById(R.id.draggable_img2);
draggableImg3 = findViewById(R.id.draggable_img3);
// 设置可拖动
draggableImg1.setOnTouchListener(this);
draggableImg2.setOnTouchListener(this);
draggableImg3.setOnTouchListener(this);
// 初始化GestureDetector和ScaleGestureDetector
gestureDetector = new GestureDetector(this, new GestureListener());
scaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
}
@Override
public boolean onTouch(View view, MotionEvent event) {
final int x = (int) event.getRawX();
final int y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// 计算偏移量
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
xDelta = x - lParams.leftMargin;
yDelta = y - lParams.topMargin;
lastTouchX = event.getX();
lastTouchY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
// 更新位置
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams.leftMargin = x - xDelta;
layoutParams.topMargin = y - yDelta;
layoutParams.rightMargin = 0;
layoutParams.bottomMargin = 0;
view.setLayoutParams(layoutParams);
// 处理旋转和缩放操作
gestureDetector.onTouchEvent(event);
scaleGestureDetector.onTouchEvent(event);
break;
}
return true;
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 计算旋转角度
rotationDegrees -= distanceX;
// 旋转图片
draggableImg1.setRotation(rotationDegrees);
draggableImg2.setRotation(rotationDegrees);
draggableImg3.setRotation(rotationDegrees);
return true;
}
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// 计算缩放比例
scale *= detector.getScaleFactor();
scale = Math.max(0.1f, Math.min(scale, 5.0f));
// 缩放图片
draggableImg1.setScaleX(scale);
draggableImg1.setScaleY(scale);
draggableImg2.setScaleX(scale);
draggableImg2.setScaleY(scale);
draggableImg3.setScaleX(scale);
draggableImg3.setScaleY(scale);
return true;
}
}
}
```
这是一个简单的实现,你可以根据你的需求进行修改和扩展。