我有这个“拖放”的东西。
所以基本上我们正在制作一个原型,让用户(孩子)将糖果拖放到罐子里。下面的代码仅适用于一个糖果(1 个图像),第二个图像根本不会移动。我不知道为什么。
任何答案都将受到高度赞赏,我希望你能解释一下,因为我在这个 android 开发中真的很新。谢谢你。
这些是我研究了一段时间的代码
package com.example.mathventure;
import com.example.mathventure.R.drawable;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Rect;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
@SuppressLint("NewApi")
public class AddTutActivity extends Activity {
private static int candyInJar = 3;
private int candyOutJar = 2;
private int totalCandy;
//private String candyId;
private ImageView[] candies = new ImageView[11];
private ImageView[] candiesOut = new ImageView[candyOutJar];
private AbsoluteLayout tutLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_tut);
tutLayout = (AbsoluteLayout) findViewById(R.id.tutLayout);
tutLayout.setOnTouchListener(new touchListener());
candiesOut[0] = (ImageView) findViewById(R.id.candyOut1);
candiesOut[1] = (ImageView) findViewById(R.id.candyOut2);
candiesOut[0].setOnTouchListener(new touchListener());
candiesOut[1].setOnTouchListener(new touchListener());
totalCandy = candyInJar + candyOutJar;
for(int i=0;i<candies.length;i++){
candies[i] = new ImageView(this);
}
candies[0].setBackgroundResource(R.drawable.candy_jar_0);
candies[1].setBackgroundResource(R.drawable.candy_jar_1);
candies[2].setBackgroundResource(R.drawable.candy_jar_2);
candies[3].setBackgroundResource(R.drawable.candy_jar_3);
candies[4].setBackgroundResource(R.drawable.candy_jar_4);
candies[5].setBackgroundResource(R.drawable.candy_jar_5);
candies[6].setBackgroundResource(R.drawable.candy_jar_6);
candies[7].setBackgroundResource(R.drawable.candy_jar_7);
candies[8].setBackgroundResource(R.drawable.candy_jar_8);
candies[9].setBackgroundResource(R.drawable.candy_jar_9);
candies[10].setBackgroundResource(R.drawable.candy_jar_10);
candies[candyInJar] = (ImageView) findViewById(R.id.candyInJar);
}
private boolean dragging = false;
private Rect hitRect = new Rect();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_add_tut, menu);
return true;
}
class touchListener extends Activity implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
boolean eventConsumed = true;
int x = (int)event.getX();
int y = (int)event.getY();
int dragging = 0;
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
if (v == candiesOut[0]) {
dragging = 0;
eventConsumed = false;
}
if (v == candiesOut[1]){
dragging = 1;
eventConsumed = false;
}
} else if (action == MotionEvent.ACTION_UP) {
if (dragging == 0) {
candies[candyInJar].getHitRect(hitRect);
if (hitRect.contains(x, y)){
candiesOut[0].setImageDrawable(null);
candies[candyInJar].setImageResource(drawable.candy_jar_4);
}
}
else if(dragging == 1){
candies[candyInJar].getHitRect(hitRect);
if (hitRect.contains(x, y)){
candiesOut[1].setImageDrawable(null);
candies[candyInJar].setImageResource(drawable.candy_jar_5);
}
}
eventConsumed = false;
} else if (action == MotionEvent.ACTION_MOVE) {
if (v != candiesOut[0] && v != candiesOut[1]) {
if (dragging != 1) {
setAbsoluteLocationCentered(candiesOut[dragging], x, y);
}
}
}
return eventConsumed;
}
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);
}
private void setSameAbsoluteLocation(View v1, View v2) {
AbsoluteLayout.LayoutParams alp2 = (AbsoluteLayout.LayoutParams) v2.getLayoutParams();
setAbsoluteLocation(v1, alp2.x, alp2.y);
}
}
}
这个是针对 xml 的:
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AddTutActivity"
android:id="@+id/tutLayout">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="116dp"
android:fontFamily="123Marker"
android:text="3 candies + 2 candies = ?"
android:textColor="@android:color/black"
android:textSize="50sp" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="123Marker"
android:text="Below is a sample question on addition. Now, you need to move the 2 candies you wanted to add into the candy jar."
android:textColor="@android:color/black"
android:textSize="25sp"
android:background="#FF3300"/>
<ImageView
android:id="@+id/candyInJar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="178dp"
android:layout_x="149dp"
android:layout_y="167dp"
android:src="@drawable/candy_jar_3" />
<ImageView
android:id="@+id/candyOut1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="94dp"
android:layout_x="489dp"
android:layout_y="347dp"
android:src="@drawable/candy" />
<ImageView
android:id="@+id/candyOut2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="544dp"
android:layout_y="346dp"
android:src="@drawable/candy" />
</AbsoluteLayout>