3
我有這個「拖放」的東西。Android:拖放多個圖像
所以基本上我們正在製作一個原型,讓用戶(孩子)將糖果拖放到罐子裏。 下面的代碼將只適用於一個糖果(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>
我建議您瞭解更多關於Android的知識,否則您將不斷受挫。首先找出爲什麼這行錯誤,'class touchListener擴展了Activity實現的OnTouchListener',它不應該擴展Activity。 – Simon
嗨西蒙。謝謝您的回答。我意識到那個OnTouchListener的事情。如果您看到代碼,我在代碼的最後部分在內部類中實現了OnTouchListener。我現在的問題是,我只能移動一張圖片,而且我需要移動5張圖片。謝謝。 –
我不想聽起來很粗魯,但它聽起來像「我不知道如何正確地做到這一點,有人只是修復我的代碼。有很多問題,除非你瞭解基礎知識,你期望如何另一個例子,這行代碼是做什麼的?'candiesOut [1] .setOnTouchListener(new touchListener())' – Simon