drag d'un dessin dans un canvas (d'une view)
Bonjour à tous!!
je souhaiterais faire bouger, slider progressivement, "en temps réel" (une sorte de drag) des pseudo-barres (matérialisées par des drawLine dans un canvas.
La classe ci dessous, est appelée par une autre classe qui fait un invalidate() toutes les 150ms.
...Les multiples booleans n'ont pas l'air très bloquants (j1, j2 servent à savoir quelle barre on veut bouger).
Mais les barres/line pour l'instant ne bougent pas.
Merci!
Code:
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
| import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class lecanvas extends View{
float f1;boolean j1;boolean j2;
float f2;boolean debut=false;
private GestureDetector mGestureDetector;
Paint p=new Paint();
class SideIndexGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// we know already coordinates of first touch
// we know as well a scroll distance
sideIndexX = sideIndexX - distanceX;
sideIndexY = sideIndexY - distanceY;
// when the user scrolls within our side index
// we can show for every position in it a proper
// item in the country list
if (sideIndexX >= 0 && sideIndexY >= 0) {
// displayListItem();
}
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
public lecanvas(Context context) {
super(context);
mGestureDetector = new GestureDetector(context, new SideIndexGestureListener());
// TODO Auto-generated constructor stub
}
public lecanvas(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new SideIndexGestureListener());
}
protected void onDraw (Canvas c) {
int width = getWidth();
int height = getHeight();
if (debut == false) {
f1 = 25;
f2 = width - 25;
}
p.setColor(Color.CYAN);
c.drawLine(f1, Math.round(height / 2) + 1, f1, height - 25, p);
c.drawLine(f2, Math.round(height / 2) + 1, f2, height - 25, p);
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
}
public boolean onTouchEvent( MotionEvent event) {
switch (event.getActionMasked()){
case MotionEvent.ACTION_DOWN:
j1=false;j2=false;if ((event.getX()<f1+10)&&
(event.getX()>f1-10)){j1=true;debut=true;
}
else{if ((event.getX()<f2+10)&&
(event.getX()>f2-10)){debut=true;j2=true;
}
}
break;
case MotionEvent.ACTION_MOVE:
if (j1==true){f1 = event.getX();}
else{if (j2==true){f2 = event.getX();}
}
break;
}
if (mGestureDetector.onTouchEvent(event)) {
return true;
} else {
return false;
}
}}; |