Я сделал свою игру, в которой я хочу вызвать метод, который у меня есть в представлении из другого представления.Я подумал, что мне как-то придется отправить «первое представление» во «второе представление» через мой MainActivity, чтобы второе представление могло вызывать методы первого представления.Тем не менее, я не смог придумать способ отправки первого представления во второе представление через MainAcitivity, поэтому я решил сменить тактику.Теперь я попытался добавить в свой MainActivity функцию для обработки взаимодействия между представлениями, но еще раз мне не удалось вызвать метод из второго представления.
Поэтому мой вопрос заключается в том, как отправитьпросмотреть другой вид через действие или, если это невозможно, как вызвать метод действия через представление?
Вот код (я добавил несколько комментариев, чтобы лучше показать проблему, с которой я столкнулся):
public class MainActivity extends AppCompatActivity {
private FishView gameView;
private SmallBall smallBall ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout screen = findViewById(R.id.gameScreen);
gameView = new FishView(this);
smallBall = new SmallBall(this);
screen.addView(gameView); // first view
screen.addView(smallBall); //second view
}
//this is the method I want to reach through the View
public void handleAvoidedBall(){
gameView.avoidedBall();
}
}
public class SmallBall extends View {
private final Bitmap sodaCan;
private final static long smallBallPeriod = 60;
private final Handler handler = new Handler();
public SmallBall(Context context) {
super(context);
Paint smallBall = new Paint();
smallBall.setColor(Color.GRAY);
smallBall.setAntiAlias(false);
resetBall();
sodaCan = BitmapFactory.decodeResource(getResources(),R.drawable.sodacan);
Timer movementTimer = new Timer();
movementTimer.scheduleAtFixedRate(smallBallTask, 0, smallBallPeriod);
}
private final TimerTask smallBallTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
invalidate();
if (isBallLanded()){
//Here I want to call on a handleAvoidedBall() in MainActivity
//OR simply have gameView here if possible
// gameView.avoidedBall();
//OR
//SomeMainAcitvityObject.handleAvoidedBall();
}
}
});
}
};
@Override
protected void onDraw(Canvas canvas) {
..... //Do stuff}
}
Итак, как я надеюсь, я объяснил несколько прилично сейчас, мне интересно, как отправить gameView в представление SmallBall ИЛИ как вызвать handleAvoidedBall () в MainActivity из представления SmallBall?
Спасибо за потраченное время и надеюсь, что у вас замечательный день!