Bonjour à tous,
Dans le contexte de mon travail, je me suis retrouvé à devoir développer pour Android et je découvre petit à petit les subtilités de ce monde assez particulier.
Mon contexte est :
- J'ai une HorizontalScrollView qui contient un RelativeLayout qui contient lui même une ImageView et un LinearLayout
- Je charge dans ce LinearLayout une liste d'ImageView afin de constituer un menu horizontal comportant des icônes (nombre variable dépendant des préférences de l'utilisateur)
- L'ImageView du RelativeLayout est un pointeur se plaçant derrière l'icône sélectionné
Le tout donne ce résultat :
Le code du xml de design est :
Le code java est :
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 <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="80dp" android:scrollbars="none" android:paddingLeft="20dp" android:paddingRight="20dp" android:background="@drawable/channbar"> <RelativeLayout android:id="@+id/layoutChannels" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/ivChannSelector" android:layout_height="80dp" android:layout_width="60dp" android:src="@drawable/ch_highlight" android:layout_below="@+id/llChannels" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:layout_marginLeft="0dp"/> <LinearLayout android:id="@+id/llChannels" android:orientation="horizontal" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_alignParentRight="true"> </LinearLayout> </RelativeLayout> </HorizontalScrollView>
Et mon problème :
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 private static int CURR_CHANN_INDEX; private void LoadChannels() { LinearLayout lChanns = (LinearLayout)findViewById(R.id.llChannels); //Retrait préventif de toutes les vues enfants lChanns.removeAllViews(); //Ajout des chaînes de la liste de l'utilisateur for (int i = 0; i < channList.length; i++) { ImageView iv = new ImageView(this); final int channIndex = i; //Image File logoFile = new File(ImageUtils.GetLogoPath(channList[channIndex])); if (logoFile.exists()) { Bitmap myBmp = BitmapFactory.decodeFile(logoFile.getAbsolutePath()); iv.setImageBitmap(myBmp); } else { iv.setImageResource(R.drawable.br_no_photo); } //Largeur et hauteur LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int)getResources().getDimension(R.dimen.chann_list_imageview_height), LinearLayout.LayoutParams.WRAP_CONTENT); //Marges params.setMargins((int)getResources().getDimension(R.dimen.chann_list_imageview_margin), 0, (int)getResources().getDimension(R.dimen.chann_list_imageview_margin), 0); //Gravité params.gravity = Gravity.CENTER_VERTICAL; //Application des paramètres iv.setLayoutParams(params); //Ajout du click Listener iv.setOnClickListener(new OnClickListener() { public void onClick(View v) { DISPLAY_CHANN_ID = channList[channIndex]; refreshBroadcasts(DISPLAY_CHANN_ID); SelectChannel(channIndex); } }); //Ajout de la vue à la liste lChanns.addView(iv); } } private void SelectChannel(int newChannIndex) { ImageView ivSel = (ImageView)findViewById(R.id.ivChannSelector); ivSel.clearAnimation(); TranslateAnimation anim = new TranslateAnimation(CURR_CHANN_INDEX * (int)getResources().getDimension(R.dimen.chann_list_selector_width), newChannIndex * (int)getResources().getDimension(R.dimen.chann_list_selector_width), 0, 0); anim.setDuration(500); anim.setFillAfter(true); ivSel.startAnimation(anim); CURR_CHANN_INDEX = newChannIndex; }
Quand je clique sur un icône, le sélecteur se place bien à sa position, mais quand je fais un slide pour afficher les icones de droite et que je clique sur l'icone, le traitement se fait bien (il m'actualise mes données affichées en dessous) et mais le sélecteur reste a sa place et ne bouge que quand je commence à déplacer le scrollview... (je sais pas si le soucis est clair mais ce n'est pas facile à expliquer >_<)
Bref, si quelqu'un à une idée (ou une question pour plus d'éclaircissements) je suis preneur ^^
En vous remerciant par avance pour vos idées et potentielles solutions ^^
Partager