Bonjour

Je viens de commencer l'Android et je suis en train de faire un petit programme ou j'ai deux écrans différents, un écrans de présentation et l'écran de l'appli en lui même et voulez avoir quelques précisions.

En fait mes écrans sont deux RelativeLayout contenu dans mon layout principal de mon fichier main, je voulais savoir si ça vous parez normal ou complètement et comment vous l'auriez fait sinon.

Mais bon ce n'est pas ça à la base mon principal problème.
En fait je veux qu'au bout d'un certain ou d'une action sur l'écran que mon écran principal s'affiche et que l'autre disparaisse.
Pour cela j'ai utilise un Timer et un TimerTask, pour qu'il m'affiche mon écran principal, par l'intermédiaire d'une fonction, au bout d'un certain temps.
Et j'ai utilisé le Listener SetOnTouchListener, sur mes layout pour capté le l'action de touché l'écran pour passer a mon écran principal.

Donc en gros ce que je veux c'est que mon écran principal s'affiche soit au bout d'un certain temps soit si on clique sur mon écran.

Si je clique pendant que mon timer n'est pas fini ça fonctionne correctement et j'ai bien mon écran principal qui s'affiche, mais si le timer est fini, déjà d'une il ne m'affiche pas mon écran principal (je crois que c'est du à l'appel de ma fonction d'affichage qui est dans un thread différent à cause du TimerTask) et deux même si je clique sur mon écran, il ne m'affiche pas mon écran principal no plus.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
public class Cheminee extends Activity implements View.OnTouchListener {
    /** Called when the activity is first created. */
 
	private static final String TAG_LOG = "TouchActivity";
    private static final boolean LOG = true;
 
    private Timer timer;
    private TimerTask ttMain;
    private RelativeLayout m_rlMain;
    private RelativeLayout m_rlSplashScreen;
    private TextView m_tvSplash;
    private ImageView m_ivCadreSplash;
    private ImageView m_ivFireSplash;
    private RelativeLayout m_rlChemineeScreen;
    private TextView m_tvCheminee;
    private ImageView m_ivCadreCheminee;
    private ImageView m_ivFireCheminee;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);
 
        ttMain = actionPerformed();
        timer = new Timer();
 
        setM_rlMain((RelativeLayout) findViewById(R.id.MainLayout));
 
        m_rlSplashScreen = (RelativeLayout) findViewById(R.id.SplashscreenLayout);
        setM_tvSplash((TextView) findViewById(R.id.TVSplash));
        setM_ivCadreSplash((ImageView) findViewById(R.id.IVCadreSplash));
        setM_ivFireSplash((ImageView) findViewById(R.id.IVFireSplash));
 
        m_rlChemineeScreen = (RelativeLayout) findViewById(R.id.ChemineeLayout);
        setM_tvCheminee((TextView) findViewById(R.id.TVCheminee));
        setM_ivCadreCheminee((ImageView) findViewById(R.id.IVCadreCheminee));
        setM_ivFireCheminee((ImageView) findViewById(R.id.IVFireCheminee));
 
        m_rlSplashScreen.setOnTouchListener(this);
        m_rlChemineeScreen.setOnTouchListener(this); 
 
        m_rlSplashScreen.setVisibility(View.VISIBLE);
 
        timer.schedule(ttMain, 5000);
    }
 
    public boolean onTouchEvent(MotionEvent event) {
        log("Activity: " + stringValue(event));
        return true;
    }
 
	@Override
	public boolean onTouch(View v, MotionEvent event) {
 
		if(v == m_rlSplashScreen)
		{
			displayMainScreen();
			log("m_rlSplashScreen: " + stringValue(event));
			return true;
		}
		else if( v == m_rlChemineeScreen)
		{
			log("m_rlChemineeScreen: " + stringValue(event));
			return true;
		}
 
		return false;
	}
 
	private TimerTask actionPerformed()
	{
		 return new TimerTask() {
 
				@Override
				public void run() {
					displayMainScreen();
				}
			};
	}
 
	private String stringValue(MotionEvent event) {
 
        final int action = event.getAction();
 
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                return "ACTION_DOWN";
            case MotionEvent.ACTION_MOVE:
                return "ACTION_MOVE";
            case MotionEvent.ACTION_UP:
                return "ACTION_UP";
            case MotionEvent.ACTION_CANCEL:
                return "ACTION_CANCEL";
        }
 
        return "";
    }
 
	private void displayMainScreen()
	{
		ttMain.cancel();
		timer.cancel();
 
		m_rlSplashScreen.setVisibility(View.INVISIBLE);
		m_rlChemineeScreen.setVisibility(View.VISIBLE);
	}
 
 
	private static void log(String message){
        if (LOG) {
            Log.d(TAG_LOG, message);
        }
    }
}
Juste pour le code, je n'ai pas intégré les fonction "set", qui ne change rien à la compréhension.

Je suis ouvert à tout. Si vous pensez que ce n'est pas du tout la bonne manière n'hésitez pas.

Merci

Solution

Pour info, s'il y en a qui sont bloqué, comme moi, il faut passer la commande de setVisibilty par l'intermédiaire d'un handler, pour etre dans le bon thread.

Voila la page qui m'a permis de trouver.