Mathieu le roux
- Posts de Forum 1
3 nov. 2014 à 22:24:47 via site
3 nov. 2014 22:24:47 via site
Bonjour,
Je suis en train de réaliser une application android, ou j'ajoute des lignes et des cercles sur un plan quadrillé. J'ai une fonction doBitmap qui permet d'insérer mes éléments sur le plan, je suis en train d'essayer de faire les fonctions undo et redo mais j'éprouve quelques difficultés. Les boutons sont créés. Mon code concernant la ligne est le suivant :
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);
}
}
}
}
et mon code permettant d'insérer la ligne et le suivant :
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;
}
}
Contenu éditorial recommandé
Avec ton accord, un contenu externe est chargé ici.
En cliquant sur le bouton ci-dessus, tu acceptes que des contenus externes soient affichés. Des données personnelles peuvent alors être transmises à des fournisseurs tiers. Tu trouveras plus d'informations à ce sujet dans notre Déclaration de protection de données.