Je suis très nouveau dans le développement Android, et j'ai une question ici puisque je n'ai pas trouvé de réponse sur Stackoverflow.Android - une distance entre le dessin réel et le mouvement des doigts
J'ai écrit un code simple pour permettre à un utilisateur de dessiner un cadre de délimitation avec un doigt sur l'écran (du coin supérieur gauche au coin inférieur droit).
La drawView classe ressemble à ceci:
public class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
}
public Point startPoint = new Point();
public Point endPoint = new Point();
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(startPoint.x,startPoint.y,endPoint.x,endPoint.y,paint);
}}
et MainActivity ressemble à ceci:
public class MainActivity extends AppCompatActivity {
DrawView drawView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
drawView.startPoint.set(0,0);
drawView.endPoint.set(0,0);
setContentView(drawView);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int eventAction = event.getAction();
// you may need the x/y location
int x = (int)event.getX();
int y = (int)event.getY();
// put your code in here to handle the event
switch (eventAction) {
case MotionEvent.ACTION_DOWN:
drawView.startPoint.set(x,y);
break;
case MotionEvent.ACTION_UP:
drawView.endPoint.set(x,y);
drawView.invalidate();
break;
case MotionEvent.ACTION_MOVE:
drawView.endPoint.set(x,y);
drawView.invalidate();
break;
}
// tell the View that we handled the event
return true;
}}
Et le résultat est une distance importante entre mon point de doigt et le point de dessin réel sur la écran qui ressemble à ceci:
La ligne bleue est mon doigt et le cadre rouge est le vrai dessin sur l'écran. Est-ce que quelqu'un sait quelle est la raison de cela? Merci beaucoup!
C'est parce que les coordonnées de 'View' sont différentes de celles de' Activity'. Gérer les événements tactiles dans le 'View' lui-même. C'est-à-dire, déplacez la méthode 'onTouchEvent()' vers votre 'DrawView'. –