package com.apdim3.learningforkidsunlimited;
import android.content.ClipData;
import android.content.ClipDescription;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.View;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Random;
public class CalculationActivity extends AppCompatActivity {
private GridLayout gridLayout1, gridLayout2;
private TextView question, answers;
private int num1,num2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculation);
gridLayout1 = findViewById(R.id.gridLayout1);
gridLayout2 = findViewById(R.id.gridLayout2);
question = findViewById(R.id.question);
answers = findViewById(R.id.answers);
populateGridLayouts();
// Generate the first question
generateQuestion();
}
void generateQuestion() {
num1 = (int) gridLayout1.getChildAt(new Random().nextInt(gridLayout1.getChildCount())).getTag();
num2 = (int) gridLayout2.getChildAt(new Random().nextInt(gridLayout2.getChildCount())).getTag();
question.setText(num1 + " + " + num2 + " = ");
int correctAnswer = num1 + num2;
setOptions(correctAnswer);
// Debug: Log the correct answer
Log.d("CalculationActivity", "Correct Answer: " + correctAnswer);
}
void setOptions(int correctAnswer) {
Random random = new Random();
int[] options = new int[4];
int correctPosition = random.nextInt(4);
for (int i = 0; i < 4; i++) {
if (i == correctPosition) {
options[i] = correctAnswer;
} else {
int wrongAnswer;
do {
wrongAnswer = random.nextInt(20); // Adjust range as needed
} while (wrongAnswer == correctAnswer);
options[i] = wrongAnswer;
}
}
TextView option1 = findViewById(R.id.option1);
TextView option2 = findViewById(R.id.option2);
TextView option3 = findViewById(R.id.option3);
TextView option4 = findViewById(R.id.option4);
option1.setText(String.valueOf(options[0]));
option2.setText(String.valueOf(options[1]));
option3.setText(String.valueOf(options[2]));
option4.setText(String.valueOf(options[3]));
setupDragAndDrop(option1, correctAnswer);
setupDragAndDrop(option2, correctAnswer);
setupDragAndDrop(option3, correctAnswer);
setupDragAndDrop(option4, correctAnswer);
}
void setupDragAndDrop(TextView option, int correctAnswer) {
option.setOnLongClickListener(view -> {
ClipData.Item item = new ClipData.Item(option.getText());
ClipData dragData = new ClipData(
option.getText(),
new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN},
item
);
View.DragShadowBuilder myShadow = new View.DragShadowBuilder(option);
view.startDragAndDrop(dragData, myShadow, null, 0);
return true;
});
answers.setOnDragListener((view, dragEvent) -> {
switch (dragEvent.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
return dragEvent.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
case DragEvent.ACTION_DRAG_ENTERED:
view.setBackgroundColor(0x30000000); // Optional: highlight when dragging over
return true;
case DragEvent.ACTION_DRAG_EXITED:
view.setBackgroundColor(0x00000000); // Optional: remove highlight when exiting
return true;
case DragEvent.ACTION_DROP:
ClipData.Item item = dragEvent.getClipData().getItemAt(0);
String dragData = item.getText().toString();
TextView answerTextView = (TextView) view;
answerTextView.setText(dragData);
int droppedAnswer = Integer.parseInt(dragData);
if (droppedAnswer == correctAnswer) {
generateQuestion(); // Generate next question if correct
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
view.setBackgroundColor(0x00000000); // Optional: remove highlight when drag ends
return true;
default:
return false;
}
});
}
void populateGridLayouts() {
for (int i = 0; i < num1; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.circle); // Replace with actual image resource
imageView.setTag(i + 1); // Assign a value to each image
GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
layoutParams.width = 50; // width in pixels
layoutParams.height = 50; // height in pixels
layoutParams.setMargins(3, 3, 3, 3); // margins in pixels
imageView.setLayoutParams(layoutParams);
gridLayout1.addView(imageView);
}
for (int i = 0; i < num2; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.star); // Replace with actual image resource
imageView.setTag(i + 1); // Assign a value to each image
GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
layoutParams.width = 50; // width in pixels
layoutParams.height = 50; // height in pixels
layoutParams.setMargins(3, 3, 3, 3); // margins in pixels
imageView.setLayoutParams(layoutParams);
gridLayout2.addView(imageView);
}
}
}
Post a Comment