Como eu faço para aparecer uma mensagem de Fim de jogo num projeto Jogo da velha

Eu estava vendo um tutorial no YouTube mas é com setText mas eu tenho uma Image e uso setImageResource que é de uma ImageButton, bom eu estou com dúvida, e quero que ele analize as linhas e colunas, e veja se o jogo acabou. Se acabou, coloque a mensagem fim de jogo.

Vocês entenderam?.

Se não entenderam me perguntem o meu código por enquanto esta assim:, ele compila mas não aparece a mensagem.

package com.example.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.myapplication.R;

public class JogoVx extends Activity { 
   
   private final String QUADRADO = "quadrado" ;
   private final String BOLA = "@drawable/bola" ;
   private final String XIS = "@drawable/x" ;
   private String lastPlay = "@drawable/bola" ;
   private View view;      
   
    
  
    int[][] estadoFinal = new int [][]{

        {1,2,3},
        {4,5,6},
        {7,8,9},

        {1,4,7},
        {2,5,8},
        {3,6,9},

        {1,5,9},
        {3,5,7},

    };

    
          
     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setView(getLayoutInflater().inflate(R.layout.jogovx, null));
    setContentView( getView() );
    
    }
    public void clickQuadrado(View v) {
      
      if (null == ((ImageButton) v).getDrawable())
       {
      if(lastPlay.equals(BOLA)) {
      ((ImageButton)v).setImageResource(R.drawable.x);
      setLastPlay( XIS ); 
      } else { ((ImageButton)v).setImageResource(R.drawable.bola);
      setLastPlay( BOLA );
      }
      } else  { Toast.makeText(getView().getContext(),"Já jogaram nesse quadrado", Toast.LENGTH_LONG).show();
        }
        }
    

    
    public ImageButton getQuadrado(int tagNum) {
    return (ImageButton)getView().findViewWithTag( QUADRADO+tagNum );
      }
      
      

    public void isFim(){
      
        for(int x=0; x<=7; ++x){
            String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
            String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
            String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

            if ((s1 == null)&&
               (s2 == null)&&
               (s3 == null)){



                if(s1.equals(s2)&& s2.equals(s3)){
                    Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
                }
            }
        }
    }
   
    public View getView() {
      return view;
      }
      public void setView(View view) {
        this.view = view;
        }
        
        public String getLastPlay() {
          return lastPlay;
        }
        
        public void setLastPlay(String lastPlay) {
          this.lastPlay = lastPlay;
        }
        
        
}

É aqui que eu estou Errando;
Alguem sabe como resolver.

public void isFim(){

for(int x=0; x<=7; ++x){
    String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
    String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
    String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

    if ((s1 == null)&&
       (s2 == null)&&
       (s3 == null)){



        if(s1.equals(s2)&& s2.equals(s3)){
            Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
        }
    }
}

}

Alguém me fala como resolver isso, ainda não consegui.

Eu já Troquei o código por isso:
,Mas também não aparece a mensagem fim de jogo.

package com.example.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.myapplication.R;

public class JogoVx extends Activity {

private final String QUADRADO = “quadrado” ;
private final String BOLA = “@drawable/bola” ;
private final String XIS = “@drawable/x” ;
int X = R.drawable.x;
int B = R.drawable.bola;
private String lastPlay = “@drawable/bola” ;
private View view;
int[][] estadoFinal = new int [][]{

{1,2,3},
{4,5,6},
{7,8,9},

{1,4,7},
{2,5,8},
{3,6,9},

{1,5,9},
{3,5,7},

};

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setView(getLayoutInflater().inflate(R.layout.jogovx, null));
setContentView( getView() );

}
public void clickQuadrado(View v) {

if (null == ((ImageButton) v).getDrawable())
{
if(lastPlay.equals(BOLA)) {
((ImageButton)v).setImageResource(X);
setLastPlay( XIS );
} else { ((ImageButton)v).setImageResource(B);
setLastPlay( BOLA );
}
} else { Toast.makeText(getView().getContext(),“Já jogaram nesse quadrado”, Toast.LENGTH_LONG).show();
}
}

public ImageButton getQuadrado(int tagNum) {
return (ImageButton)getView().findViewWithTag( QUADRADO+tagNum );
}

public void isFim(){

for(int x=0; x<=7; ++x){
   String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
   String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
   String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

    if ((s1 == null)&&
       (s2 == null)&&
       (s3 == null)){



        if(s1.equals(s2)&& s2.equals(s3)){
            Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
        }
    }
}

}

public View getView() {
return view;
}
public void setView(View view) {
this.view = view;
}

public String getLastPlay() {
  return lastPlay;
}

public void setLastPlay(String lastPlay) {
  this.lastPlay = lastPlay;
}

}
.
.
.
Mas não sei como chamar a int do getDrawable() por enquanto está toString.
Outra, por que não consigo colocar getImageResource() só consigo getDrawable().
Aqui
String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();
Aguem sabe Resolver isso?

Você tentou criar um algoritmo para isso?
Você tem certeza que a validação está funcionando adequadamente?
Lembre-se, você precisa validar se uma coluna ou uma linha ou uma das diagonais possui três símbolos iguais.

@darlan_machado
O problema está na validação disso

for(int x=0; x<=7; ++x){
String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

    if ((s1 == null)&&
       (s2 == null)&&
       (s3 == null)){



        if(s1.equals(s2)&& s2.equals(s3)){
            Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
        }

.
.
.
No tutorial que eu vi esta assim

public void isFim(){
for(int x=0; x<=7; ++x){

        String s1 = getQuadrado(estadoFinal[x][0]).getText().toString();
        String s2 = getQuadrado(estadoFinal[x][1]).getText().toString();
        String s3 = getQuadrado(estadoFinal[x][2]).getText().toString();

        if ((!s1.equals(""))&&
                (!s2.equals(""))&&
                (!s3.equals(""))){



            if(s1.equals(s2)&& s2.equals(s3)){
                Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
            }

Só que é uma imageButton e não tem getText().toString () , é uma image aí eu coloquei getDrawable ().toString esse compila mas não faz a função.
Eu também já tentei getImageResource ().toString (), mas da erro
Também .
já tentei getImageResource ().toInt ().
Mas também da erro .

Como faço para fazer referência a SetImageResource (int) e ele ver se são iguais nas diagonas nas linhas e colunas e executar a função?

Se não entendeu, me pergunte.

Mas se é uma imagem, você define qual imagem será inserida em cada imagebutton em algum momento, não?
Você nunca vai conseguir comparar um Cavalo com um Caminhao e ter um resultado true.
É a mesma coisa, neste caso.
Compare imagem com imagem.

@darlan_machado
Como eu faço então?
.
.
.
Talvez eu tenha entendido Errado…
, porque não posso comparar imagem com imagem, se elas vão estar iguais nas diagonais,nas linhas e colunas , por que não pode ser verdade.
Bom, resumindo …
Como faço para fazer referência a SetImageResource (int) e a int dele e ele ver se são iguais nas diagonas nas linhas e colunas e executar a função de aparecer a mensagem?
Bom, se fosse um Button e usasse setText e getText ()
Isso ia funcionar

int [][] estadoFinal = new int [][]{

    {1,2,3},
    {4,5,6},
    {7,8,9},

    {1,4,7},
    {2,5,8},
    {3,6,9},

    {1,5,9},
    {3,5,7},

};

public void clickquadrado(View v){

    if (((Button)v).getText().equals( "" )){
        if(getLastPlay().equals(XIS)){
            ((Button)v).setText( BOLA );
            setLastPlay(BOLA);
        }else{
            ((Button)v).setText( XIS );
            setLastPlay(XIS);
        }

   }else{
        Toast.makeText( getView().getContext(),"Escolhá outro quadrado", Toast.LENGTH_LONG).show();
    }
}

public void isFim(){

for(int x=0; x<=7; ++x){
   String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
   String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
   String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

if ((!s1.equals(""))&&
(!s2.equals(""))&&
(!s3.equals(""))){

        if(s1.equals(s2)&& s2.equals(s3))
        {
            Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
        }
    }
}

}
Mas eu quero colocar um ImageButton e não encontro tutorial para isso.
Por enquanto o código que fiz esta assim:

package com.example.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.myapplication.R;

public class JogoVx extends Activity {

private final String QUADRADO = “quadrado” ;
private final String BOLA = “@drawable/bola” ;
private final String XIS = “@drawable/x” ;
int X = R.drawable.x;
int B = R.drawable.bola;
private String lastPlay = “@drawable/bola” ;
private View view;
int[][] estadoFinal = new int [][]{

{1,2,3},
{4,5,6},
{7,8,9},

{1,4,7},
{2,5,8},
{3,6,9},

{1,5,9},
{3,5,7},

};

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setView(getLayoutInflater().inflate(R.layout.jogovx, null));
setContentView( getView() );

}
public void clickQuadrado(View v) {

if (null == ((ImageButton) v).getDrawable())
{
if(lastPlay.equals(BOLA)) {
((ImageButton)v).setImageResource(X);
setLastPlay( XIS );
} else { ((ImageButton)v).setImageResource(B);
setLastPlay( BOLA );
}
} else { Toast.makeText(getView().getContext(),“Já jogaram nesse quadrado”, Toast.LENGTH_LONG).show();
}
}

public ImageButton getQuadrado(int tagNum) {
return (ImageButton)getView().findViewWithTag( QUADRADO+tagNum );
}

public void isFim(){

for(int x=0; x<=7; ++x){
   String s1 = getQuadrado(estadoFinal[x][0]).getDrawable().toString();
   String s2 = getQuadrado(estadoFinal[x][1]).getDrawable().toString();
   String s3 = getQuadrado(estadoFinal[x][2]).getDrawable().toString();

    
    if ((!s1.equals(""))&&
       (!s2.equals(""))&&
       (!s3.equals(""))){

        if(s1.equals(s2)&& s2.equals(s3))
        {
            Toast.makeText(getView().getContext(),"Fim do jogo!", Toast.LENGTH_LONG).show();
        }
    }
}

}

public View getView() {
return view;
}
public void setView(View view) {
this.view = view;
}

public String getLastPlay() {
  return lastPlay;
}

public void setLastPlay(String lastPlay) {
  this.lastPlay = lastPlay;
}

}

@darlan_machado
você sabe como fazer?

Veja, você declarou BOLA como sendo

Neste caso, você só tem o “nome” e não o elemento image em si.
Você precisa, neste caso, obter a imagem que se refere a tal elemento, algo como

ImageButton jogador1 = findElementById(BOLA); //Não me recordo de como obter, acho que é algo assim

Aí você compara

if((ImageButton) v).getDrawable().equals(jogador1)) {

Deve ser por aí o caminho.

@darlan_machado
Você sabe me dizer o que é e para o que getResources () retorna?
Ele coloquei ele qui e agora aparece a mensagem de fim de jogo, mas so que é quando eu faço a primeira jogada.
String s1 = getQuadrado(estadoFinal[x][0]).getResources().toString();
.
.
.
O que getResources () retorna ? que valor?

@darlan_machado
Bom, se eu estou tento dificuldade comparar image , o que eu poderia comparar no ImageButton.
Colocar um set e depois get . No exemplo setText ,getText do button.

@darlan_machado
Comparar background é fácil ?. se for, como faz?.
O set e get