这里我创建了一个可拖动的imageview。这是我的示例代码(未给出完整代码)
public class mainClass extends Activity
{
MyView obj1,obj2;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
AbsoluteLayout layout = new AbsoluteLayout(LearnKid.this);
layout.setLayoutParams(new AbsoluteLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,0,0));
obj1 = new MyView(this);
obj2 = new MyView(this);
layout.addView(obj1);
layout.addView(obj2);
setContentView(layout);
}
}
class MyView extends ImageView
{
public MyView(Context context)
{
super(context);
}
public boolean dispatchTouchEvent(MotionEvent event)
{
center_X= (int)event.getRawX();
center_Y = (int)event.getRawY();
this.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,
AbsoluteLayout.LayoutParams.WRAP_CONTENT,center_X-10,center_Y-(70)));
}
}
这里我得到2个单独的图像视图,也可以拖动。 但是我如何检查第一张图像是否越过第二张图像。 因为在那一点上我想停止可拖动的选项。
Plz帮助
提前完成......
答案 0 :(得分:0)
我将为此提供初始逻辑。您必须获取要检查的项目的位置,并比较拖动的项目x或y坐标(或两者都取决于您想要实现的目标)是否已通过第二项x和/或y坐标。您需要对笛卡尔坐标系有基本的了解。
这可以在拖动逻辑中实现,也可以在释放对象时实现(从手指中取出)。
现在只是为了清除别的东西。您使用AbsoluteLayout有什么特殊原因吗?如果没有,那么请不要使用它,因为它已被弃用,不鼓励使用它。
答案 1 :(得分:0)
AABB轴对齐边界框
每次要更新位置和被拖动的框时,都要测试它们是否重叠
你可以尝试适应这个
axmin = gofd.getPosition().x-gofd.getObjectSize().x/2f;
axmax = gofd.getPosition().x+gofd.getObjectSize().x/2f;
aymin = gofd.getPosition().y-gofd.getObjectSize().y/2f;
aymax = gofd.getPosition().y+gofd.getObjectSize().y/2f;
Enumeration<Integer> e2 = myHash.getKeys();
while( e2. hasMoreElements() ){
GameObject toDraw = myHash.getGameObjectForID(e2.nextElement());
if(toDraw != null){
bymax = toDraw.getPosition().y+toDraw.getObjectSize().y/2f;
bymin = toDraw.getPosition().y-toDraw.getObjectSize().y/2f;
bxmin = toDraw.getPosition().x-toDraw.getObjectSize().x/2f;
bxmax = toDraw.getPosition().x+toDraw.getObjectSize().x/2f;
if(!(axmax<bxmin || bxmax <axmin || aymax<bymin || bymax <aymin)){
return true;
}
}
}
}
gofd =游戏对象手指拖动
这是我游戏的旧版本的代码片段
myHash包含对我正在使用的图像数据表的引用,但它不应该远离你需要的