gpt4 book ai didi

android - 如何在android中拖动多个图像

转载 作者:行者123 更新时间:2023-11-29 02:05:13 25 4
gpt4 key购买 nike

我可以在 Canvas 上拖动一张图片。现在我想拖动多张图片。有没有可能这样做?

最佳答案

使用此代码对您很有帮助,如果有帮助请点击右边。

package edu.sbcc.cs123.draganddropbasic;

import android.app.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;

@SuppressWarnings("deprecation")
public class DragAndDropBasicActivity extends Activity implements OnTouchListener {
private ImageView letterView; // The letter that the user drags.
private ImageView emptyLetterView; // The letter outline that the user is supposed to drag letterView to.
private AbsoluteLayout mainLayout;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mainLayout = (AbsoluteLayout) findViewById(R.id.mainLayout);
mainLayout.setOnTouchListener(this);
letterView = (ImageView) findViewById(R.id.letterView);
letterView.setOnTouchListener(this);

emptyLetterView = (ImageView) findViewById(R.id.emptyLetterView);
}

private boolean dragging = false;
private Rect hitRect = new Rect();

@Override
/**
* NOTE: Had significant problems when I tried to react to ACTION_MOVE on letterView. Kept getting alternating (X,Y)
* locations of the motion events, which caused the letter to flicker and move back and forth. The only solution I could
* find was to determine when the user had touched down on the letter, then process moves in the ACTION_MOVE
* associated with the mainLayout.
*/
public boolean onTouch(View v, MotionEvent event) {
boolean eventConsumed = true;
int x = (int)event.getX();
int y = (int)event.getY();

int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
if (v == letterView) {
dragging = true;
eventConsumed = false;
}
} else if (action == MotionEvent.ACTION_UP) {

if (dragging) {
emptyLetterView.getHitRect(hitRect);
if (hitRect.contains(x, y))
setSameAbsoluteLocation(letterView, emptyLetterView);
}
dragging = false;
eventConsumed = false;

} else if (action == MotionEvent.ACTION_MOVE) {
if (v != letterView) {
if (dragging) {
setAbsoluteLocationCentered(letterView, x, y);
}
}
}

return eventConsumed;

}


private void setSameAbsoluteLocation(View v1, View v2) {
AbsoluteLayout.LayoutParams alp2 = (AbsoluteLayout.LayoutParams) v2.getLayoutParams();
setAbsoluteLocation(v1, alp2.x, alp2.y);
}


private void setAbsoluteLocationCentered(View v, int x, int y) {
setAbsoluteLocation(v, x - v.getWidth() / 2, y - v.getHeight() / 2);
}


private void setAbsoluteLocation(View v, int x, int y) {
AbsoluteLayout.LayoutParams alp = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
alp.x = x;
alp.y = y;
v.setLayoutParams(alp);
}
}

而Xml是……

 <?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainLayout">

<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/emptyLetterView"
android:src="@drawable/r_empty"
android:layout_x="200px"
android:layout_y="300px">

</ImageView>

<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/letterView"
android:src="@drawable/r_filled" >

</ImageView>

关于android - 如何在android中拖动多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com