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 :

Sélectionner un élément sur un autre


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Points : 84
    Points
    84
    Par défaut Sélectionner un élément sur un autre
    Bonjour mon problème est le suivant sur mon application j'ajoute des lignes grises et je dois pouvoir ajouter des lignes d'une couleur rouge par dessus mais plus petit, le code pour ajouter une ligne est le suivant :
    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
     
    public class Ligne extends EltPlan {
    	private static final int epaisseur = 8;
    	private int a, b;
     
    	private Ligne(int x, int y, int width, int height) {
    		super(x, y, width, height);
    	}
     
    	public static Ligne LigneHorizontal(int x, int y, int lgr) {
    		return new Ligne(x, y, lgr, epaisseur);
    	}
     
    	public static Ligne LigneVertical(int x, int y, int lgr) {
    		return new Ligne(x, y, epaisseur, lgr);
    	}
     
    	public void doBitmap() {
    		// Si la ligne est selectionné on l'encadre en rouge
    		if (isSelected()) {
    			setBitmap(Bitmap.createBitmap(getPixelsWidth() + 10,
    					getPixelsHeight() + 10, Config.ARGB_8888));
    			for (b = 5; b < getBitmap().getHeight() - 5; b++) {
    				for (a = 5; a < getBitmap().getWidth() - 5; a++)
    					getBitmap().setPixel(a, b, Color.GRAY);
    			}
    			for (a = 0; a < getBitmap().getWidth(); a++)
    				getBitmap().setPixel(a, 0, Color.RED);
    			for (a = 0; a < getBitmap().getWidth(); a++)
    				getBitmap().setPixel(a, getBitmap().getHeight() - 1, Color.RED);
    			for (b = 0; b < getBitmap().getHeight(); b++)
    				getBitmap().setPixel(0, b, Color.RED);
    			for (b = 0; b < getBitmap().getHeight(); b++)
    				getBitmap().setPixel(getBitmap().getWidth() - 1, b, Color.RED);
    		} else {
    			setBitmap(Bitmap.createBitmap(getPixelsWidth(), getPixelsHeight(),
    					Config.ARGB_8888));
    			for (b = 0; b < getBitmap().getHeight(); b++) {
    				for (a = 0; a < getBitmap().getWidth(); a++)
    					getBitmap().setPixel(a, b, Color.GRAY);
    			}
    		}
    	}
    }
    le code pour l'autre ligne est le suivant :
    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
     
    public class Ligne2 extends EltPlan
    {
    	private static final int epaisseur=10;
    	private int a,b;
     
    	private Ligne2(int x,int y,int width,int height)
    	{
    		super(x,y,width,height);
    	}
     
     
    	public static Ligne2 Ligne2Horizontale(int x,int y,int lgr)
    	{
    		return new Ligne2(x,y-1,lgr,epaisseur);
    	}
     
    	public static Ligne2 Ligne2Verticale(int x,int y,int lgr)
    	{
    		return new Ligne2(name,x-1,y,epaisseur,lgr);
    	}
     
    	@Override
    	public void doBitmap()
    	{
    		if(isSelected())
    		{
    			setBitmap(Bitmap.createBitmap(getPixelsWidth()+10,getPixelsHeight()+10, Config.ARGB_8888));
    			for(b=5;b<getBitmap().getHeight()-5;b++)
    			{
    				for(a=5;a<getBitmap().getWidth()-5;a++)
    					getBitmap().setPixel(a, b, Color.rgb(222,184,135));
    			}
    			for(a=0;a<getBitmap().getWidth();a++)
    				getBitmap().setPixel(a, 0, Color.RED);
    			for(a=0;a<getBitmap().getWidth();a++)
    				getBitmap().setPixel(a,getBitmap().getHeight()-1, Color.RED);
    			for(b=0;b<getBitmap().getHeight();b++)
    				getBitmap().setPixel(0, b, Color.RED);
    			for(b=0;b<getBitmap().getHeight();b++)
    				getBitmap().setPixel(getBitmap().getWidth()-1, b, Color.RED);
    		}
    		else
    		{
    			setBitmap(Bitmap.createBitmap(getPixelsWidth(),getPixelsHeight(), Config.ARGB_8888));
    			for(b=0;b<getBitmap().getHeight();b++)
    			{
    				for(a=0;a<getBitmap().getWidth();a++)
    					getBitmap().setPixel(a, b, Color.rgb(222,184,135));
    			}
    		}
    	}
    Et pour l'insérer et le suivant:
    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
     
    public class InsertionLigne2Listener implements OnTouchListener {
    	private Plan plan;
    	private Ligne selected;
    	private EltBatiment nvlElt, selectedLigne2;
    	private int selection = 0;
    	public static final int NO_SELECTION = 0;
    	public static final int SELECT_LIGNE2 = 1;
     
    	public InsertionLigne2Listener(Plan plan) {
    		this.plan = plan;
    	}
     
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		v.performClick();
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN: {
    			onTouchDown(event);
    			return true;
    		}
    		case MotionEvent.ACTION_MOVE: {
    			onTouchMove(event);
    			return true;
    		}
    		case MotionEvent.ACTION_UP: {
    			onTouchUp(event);
    			break;
    		}
    		}
    		return false;
    	}
     
    	private void onTouchDown(MotionEvent event) {
     
    		if (selected != null) {
    			if (selected.isVertical()) {
    				if (selection == SELECT_LIGNE2)
    					selectedLigne2 = selected.getLigne2At(
    							selected.getPosition().x, (int) event.getY());
    			} else {
    				if (selection == SELECT_LIGNE2)
    					selectedLigne2 = selected.getLigne2At((int) event.getX(),
    							selected.getPosition().y);
    			}
    		}
     
    		if (plan.getSelectedLigne() == null
    				|| (selectedLigne == null )) {
     
    			if (plan.getSelectedLigne() == null)
    				plan.setSelectedLigne(plan.getCurrentFloor().getSelectedLigne(
    						(int) event.getX(), (int) event.getY()));
    			selected = plan.getSelectedLigne();
    			if (selected != null) {
    				selected.setSelected(true);
    				if (selected.isVertical()) {
    					switch (plan.getEltToInsert()) {
    					case Plan.LIGNE2: {
    						nvlElt = Ligne2.Ligne2Verticale(selected.getPosition().x, (int) event.getY(),30);
    						nvlElt.setMeterWidth(nvlElt.getPixelsWidth()
    								/ plan.getScale());
    						nvlElt.setMeterHeight(1.5);
    						nvlElt.setPixelsHeight((int) (nvlElt.getMeterHeight() * plan
    								.getScale()));
    						selected.add((Ligne2) nvlElt);
    						selectedLigne2 = nvlElt;
    						break;
    					}
     
    					}
    				} else {
    					switch (plan.getEltToInsert()) {
    					case Plan.LIGNE2: {
    						nvlElt = Ligne2.Ligne2Horizontale((int) event.getX(), selected.getPosition().y,30);
    						nvlElt.setMeterHeight(nvlElt.getPixelsWidth()
    								/ plan.getScale());
    						nvlElt.setMeterWidth(1.5);
    						nvlElt.setPixelsWidth((int) (nvlElt.getMeterWidth() * plan
    								.getScale()));
    						selected.add((ligne2) nvlElt);
    						selectedLigne2 = nvlElt;
    						break;
    					}					}
    				}
     
    			}
    		} else {
    			if (selected.isVertical()) {
    				if (selection == SELECT_LIGNE2)
    					selectedLigne2 = selected.getLigne2At(
    							selected.getPosition().x, (int) event.getY());
    				} else {
    				if (selection == SELECT_LIGNE2)
    					selectedLigne2 = selected.getLigne2At((int) event.getX(),
    							selected.getPosition().y);
    			}
    		}
    		plan.invalidate();
    	}
     
    	private void onTouchMove(MotionEvent event) {
     
    	}
     
    	private void onTouchUp(MotionEvent event) {
     
     
    	}
    }
    Le code suivant me permet de l'inserer sur le plan :
    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 InsertionLigneListener implements OnTouchListener {
     
    	private Plan plan;
    	Ligne nvlElt;
    	private int EltX, EltY;
    	private int selection;
    	private boolean onRight = false;
     
    	public static final int NO_SELECTION = 0;
    	public static final int SELECT_LIGNE = 1;
     
    	public InsertionLigneListener(Plan plan) {
    		this.plan = plan;
    	}
     
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		v.performClick();
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			onTouchDown(event);
    			return true;
    		case MotionEvent.ACTION_MOVE:
    			onTouchMove(event);
    			return true;
    		case MotionEvent.ACTION_UP:
    			onTouchUp(event);
    			break;
    		}
    		return false;
    	}
     
    	private void onTouchDown(MotionEvent event) {
     
    	}
     
    	private void onTouchMove(MotionEvent evnet) {
     
    	}
     
     
    	private void onTouchUp(MotionEvent event) {
    		switch (selection) {
    		case SELECT_LIGNE:
    			if (EltX == -1) {
    				EltX = (int) event.getX();
    				EltY = (int) event.getY();
    			} else {
    				int departX, departY;
    				if (Math.abs((int) event.getY() - EltY) > Math
    						.abs((int) event.getX() - EltX)) {
     
    					// Ligne vertical
    					if ((int) event.getY() > EltY){
    						departY = EltY;
    					}else{
    						departY = (int) event.getY();
    					}
    					departX = lastEltX;
    					if (onRight) {
    						nvlElt = Ligne.LigneVertical(departX, departY,
    								Math.abs((int) event.getY() - EltY));
    						 nvlElt.setPixelsHeight(nvlElt.getPixelsHeight()
    								+ nvlElt.getPixelsWidth());
    					} else {
    						nvlElt = Ligne.LigneVertical(departX, departY,
    								Math.abs((int) event.getY() - EltY));
    					}
     
    					EltY = (int) event.getY();
    					onRight = false;
     
    				} else {
    					// Ligne horizontal
    					if ((int) event.getX() > EltX) {
    						onRight = true;
    						departX = EltX;
    					} else {
    						onRight = false;
    						departX = (int) event.getX();
    					}
    					departY = EltY;
    					nvlElt = Ligne.LigneHorizontal(departX, departY,
    							Math.abs((int) event.getX() - EltX));
    					EltX = (int) event.getX();
    				}
     
    				plan.add(nvlElt);
     
    				plan.invalidate();
    			}
    			break;
    		}
    	}
    je dois pouvoir selectionner le premier qui m'ouvre un menu afin de pouvoir effectuer des reglages ou alors de pouvoir supprimer cette ligne le code est le suivant :
    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
     
    public class SelectionLigneListener implements OnTouchListener {
     
    	private Plan plan;
    	private Ligne ligneSelected;
     
    	public SelectionLigneListener(Plan plan) {
    		this.plan = plan;
    	}
     
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		v.performClick();
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			onTouchDown(event);
    			return true;
    		case MotionEvent.ACTION_MOVE:
    			onTouchMove(event);
    			return true;
    		case MotionEvent.ACTION_UP:
    			onTouchUp(event);
    			break;
    		}
    		return false;
    	}
     
    	public void onTouchDown(MotionEvent event) {
     
    	}
     
    	public void onTouchMove(MotionEvent event) {
     
    	}
     
    	public void onTouchUp(MotionEvent event) {
    		if (ligneSelected == null) {
    			ligneSelected = plan.getCurrentFloor().getSelectedLigne(
    							(int) event.getX(), (int) event.getY());
    					if (ligneSelected != null) {
    						ligneSelected.setSelected(true);
    						plan.setSelectedLigne(ligneSelected);
    						plan.getAttachedActivity().changeToMenu(
    								IndoorActivity.MENU_PARAMETRAGE);
    					}
    				}
    			}
    		} else {
    			if (ligneSelected != null) {
    				ligneSelected.setSelected(false);
    				ligneSelected = null;
    			}
    			if (plan.getAttachedActivity() != null)
    				plan.getAttachedActivity().changeToMenu(
    						IndoorActivity.MENU_EDITION);
    			plan.invalidate();
    		}
    	}

    et du coup mon probleme est le suivant je dois maintenant pouvoir selectionner la ligne rouge pour pouvoir si je le veut supprimer ou faire des reglages mais mon problème et que des que je veux selectionner cette ligne alors c'est ma ligne grise qui est selectionné a chaque fois. Quelqu'un pourrait il m'aider

    Merci

  2. #2
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Bonjour,

    Est ce que tu as essayer de rendre non clickable ta ligne grise quand tu ajoute ta rouge par dessus? C'est un attribut "Clickable" que tu dois setter a false.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Points : 84
    Points
    84
    Par défaut
    Quand j'ajoute ma ligne rouge il n'y a pas de problème c'est au moment ou je veux selectionner cet ligne rouge alors elle me selectionne tout le temps la ligne grise, je vais regarder. Parce que je dois faire une nouvelle classe pour la selection de la deuxième ligne et c'est donc dans onTouchUp que je dois implémenter :
    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
     
    public class SelectionLigne2Listener implements OnTouchListener {
     
    	private Plan plan;
    	private Ligne2 ligne2Selected;
    	private Ligne ligneSelected;
    	private int selection = 0;
    	public static final int NO_SELECTION = 0;
    	public static final int SELECT_LIGNE2 = 1;
     
    	public SelectionLigne2Listener(Plan plan) {
    		this.plan = plan;
    	}
     
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		v.performClick();
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			onTouchDown(event);
    			return true;
    		case MotionEvent.ACTION_MOVE:
    			onTouchMove(event);
    			return true;
    		case MotionEvent.ACTION_UP:
    			onTouchUp(event);
    			break;
    		}
    		return false;
    	}
     
    	public void onTouchDown(MotionEvent event) {
    	}
     
    	public void onTouchMove(MotionEvent event) {
    	}
     
    	public void onTouchUp(MotionEvent event) {
    		if (ligneSelected == null) {
    				ligne2Selected = plan.getCurrentFloor().getSelectedLigne2((int) ligneSelected.getPosition().x, (int) ligneSelected.getPosition().y);
    				if (ligne2Selected != null) {
    					ligne2Selected.setSelected(true);
    					plan.setSelectedLigne2(ligne2Selected);
    					plan.getAttachedActivity().changeToMenu(
    							IndoorActivity.MENU_PARAMETRAGE);
    				}
    		}
    	}
    Merci

  4. #4
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Re,

    Si je comprend bien, tu ajoute ta ligne rouge sur ta ligne grisse. Il est fort possible qu'il y est un conflit entre les deux objet clickable de ton interface.
    C'est ce qui arrive par exemple quand tu met un bouton dans une listView, la listeView sera prioritaire sur ton bouton et l'event sera toujours catché par ta listView.

    Je sais pas comment cala se passe avec les bitmap mais il est possible que cela vienne de la, bon courage en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/12/2010, 13h39
  2. Déclencher un évenement sur un autre élément
    Par yoouns dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2009, 21h55
  3. Comment intervenir sur un autre élément lors d'un :hover?
    Par Nixar dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 29/10/2008, 17h57
  4. pointer sur un autre élément d'une liste en codage
    Par rahan_dave dans le forum Access
    Réponses: 3
    Dernier message: 03/02/2006, 13h25

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