IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

setScale() et réorganisation du linearLayout


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Par défaut setScale() et réorganisation du linearLayout
    Bonjour,
    j ai un LinearLayout horizontal sur lequel je fais apparaître des ImageView, tous collés les uns aux autres.
    Lorsque j'intercepte un MotionEvent sur ce layout, je cherche quelle ImageView est à cet endroit et je modifie sa taille en utilisant les méthode setScaleX/Y()
    Le soucis est que les ImageView ne se replacent pas et je me retrouve avec un overlapping assez désagréable.

    Auriez vous une idée? Est ce la définition de mon Layout qui n est pas bonne ou alors dois je implémenter le placement à la main ??
    Merci

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    On pourrait voir ton code quand tu mets à jour ton ImageView ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Par défaut
    oui bien sûr, tout d abord le fichier main.xml de layout

    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
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >
     
     
        <ImageView
            android:id="@+id/mainImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/i1" />
     
        <LinearLayout
            android:id="@+id/coverflow"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="35dp" 
            android:layout_gravity="bottom|center_vertical">
        </LinearLayout>
    </FrameLayout>
    mainImageView est l image qui occupe la totalité de l 'écran
    coverflow (je n ai pas trouvé de meilleur nom) est la liste de thumbnails horizontaux

    code de la classe CoverFlow qui prend en parametre le layout de thumbnails
    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
     
    public class CoverFlow implements OnTouchListener {
    	private final PageIterator pageIterator;
    	private final ViewGroup layout;
     
    	private View targetView;
    	private CoverFlowListener coverFlowListener;
    	private Animation anim;
    	/**
     
    */
    	public CoverFlow(ViewGroup layout, PageIterator imageIterator) {
    		this.layout = layout;
    		this.pageIterator = imageIterator;
    		setup();
    	}
     
    	private void setup() {
    		Resources resources = layout.getContext().getResources();
    		pageIterator.moveFirst();
    		Page page;
    		ImageView img = null;
    		LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
    				LayoutParams.WRAP_CONTENT, 1f);
     
    		while (pageIterator.hasNext()) {
    			page = (Page) pageIterator.current();
     
    			previous = img;
    			img = new ImageView(layout.getContext());
    			img.setImageBitmap(page.getBitmap());
    			img.setId(page.getPageNum());
    			layout.addView(img, params);
    			pageIterator.next();
    		}
    		layout.invalidate();
    		layout.setOnTouchListener(this);
    		appear();
    	}
     
    	void appear()
    	{
    		anim = new AlphaAnimation(0.0f, 1.0f);
    		anim.setDuration(4000);
    		layout.startAnimation(anim);
    	}
    	void disappear()
    	{
    		anim = new AlphaAnimation(1.0f, 0.0f);
    		anim.setDuration(4000);
    		layout.startAnimation(anim);
    	}
    	public boolean onTouch(View v, MotionEvent event) {
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_UP:
    			detectView(event.getX());
    			getCoverFlowListener().gotoPage(targetView.getId());
     
    			break;
    		case MotionEvent.ACTION_MOVE:
    			detectView(event.getX());
    			targetView.bringToFront();
    			targetView.setScaleX(1.5f);
    targetView.setScaleY(1.5f);
    			targetView.invalidate();
    			layout.invalidate();
    			break;
    		default:
     
    		}
    		return true;
    	}
     
    	/**
             * detection of the view the finger is over
             */
    	private void detectView(float x) {
    		UtilsForNoob.trace("children: " + String.valueOf(layout.getChildCount()));
    		for(int i=0;i<layout.getChildCount();i++){
    			UtilsForNoob.trace("child at "+ String.valueOf(i) +" " + String.valueOf(layout.getChildAt(i).getX()) );
    			if(layout.getChildAt(i).getX()<= x && layout.getChildAt(i).getX()+layout.getChildAt(i).getWidth()>= x)
    			{
    				targetView = layout.getChildAt(i);
    			}
    		}
    	}
     
    	public CoverFlowListener getCoverFlowListener() {
    		return coverFlowListener;
    	}
     
    	public void setCoverFlowListener(CoverFlowListener coverFlowListener) {
    		this.coverFlowListener = coverFlowListener;
    	}
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Par défaut
    j ai du éditer le code pour revenir a la version LinearLayout car entre temps j ai testé avec RelativeLayout en alignant la vue a droite de son voisin le précédent... le résultat est encore pire, j ai une vignette au milieu, une a droite...et c est tout alors que j en ai une vingtaine à afficher

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    En même temps tu fixes ton linearlayout à 35dp.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Par défaut
    désolé je suis débutant , il me faudrait plus d explication
    j ai fixé la hauteur du layout a 35.
    Cela, selon toi bloquerait quoi?
    parce que les vignettes se resize bien mais elles se chevauchent du coup

Discussions similaires

  1. Réorganisation TABLE
    Par user_oracle dans le forum Administration
    Réponses: 30
    Dernier message: 24/03/2011, 09h25
  2. Script de réorganisation de(s) table(s)
    Par user_oracle dans le forum Administration
    Réponses: 10
    Dernier message: 30/04/2004, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo