Fehler - OnTouch mit Vererbung und Überschreiben

  • Fehler - OnTouch mit Vererbung und Überschreiben

    Hallo zusammen,

    ich schreib mir geraden einen kleinen Controller in Java für mein Handy.

    Meine frage ist nun, warum wir beim Coustom Controller die entgegengestzte richtung angegeben als im Stock Controller?
    Im Log sieht man das auch sehr deutlich, denk ich, denn in nicht mal 0,000 sec 50px nach links und rechts ich glaube für den Menschen nicht mach bar.

    Quellcode

    1. 03-02 07:16:36.563 5033-5033/com.example.facebamm.test D/Controller: Touchdown: 0
    2. 03-02 07:16:36.801 5033-5033/com.example.facebamm.test D/Controller: Left:0
    3. 03-02 07:16:36.801 5033-5033/com.example.facebamm.test D/Coustom Controller: Right: 0
    4. 03-02 07:16:37.023 5033-5033/com.example.facebamm.test D/Controller: Touchcancel: 0

    Java-Quellcode: Start-Intent

    1. public class MainActivity extends AppCompatActivity{
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. Controller controller = new Controller(){
    7. @Override
    8. public boolean onTouch(View v, MotionEvent event) {
    9. return super.onTouch(v, event);
    10. }
    11. @Override
    12. public void left(int index, float oldx, float oldy, float x, float y) {
    13. super.right(index, oldx, oldy, x, y);
    14. Log.d("Coustom Controller", "Left: " + index);
    15. }
    16. @Override
    17. public void right(int index, float oldx, float oldy, float x, float y) {
    18. super.right(index, oldx, oldy, x, y);
    19. Log.d("Coustom Controller", "Right: " + index);
    20. }
    21. };
    22. findViewById(R.id.Container_main).setOnTouchListener(controller);
    23. }
    24. }
    Alles anzeigen

    Java-Quellcode: Controller

    1. public class Controller implements View.OnTouchListener,touchhelper {
    2. private float sensitivitiesX = touchhelper.sensitivitiesX,
    3. sensitivitiesY = touchhelper.sensitivitiesY;
    4. private long scandelay = touchhelper.scandelay;
    5. private SparseArray<PointF> mActivePointers;
    6. private View view;
    7. public Controller() {
    8. mActivePointers = new SparseArray<>();
    9. setSensitivities(50);
    10. }
    11. public void left(int index, float oldx, float oldy, float x, float y) {
    12. Log.d("Controller", "Right: " + index);
    13. }
    14. public void right(int index, float oldx, float oldy, float x, float y) {
    15. Log.d("Controller", "Left:" + index);
    16. }
    17. public void up(int index, float oldx, float oldy, float x, float y) {
    18. Log.d("Controller", "Up: " + index);
    19. }
    20. public void down(int index, float oldx, float oldy, float x, float y) {
    21. Log.d("Controller", "Down: " + index);
    22. }
    23. public void touchdown(int index, float x, float y) {
    24. Log.d("Controller", "Touchdown: " + index);
    25. }
    26. public void touchcancel(int index, float x, float y) {
    27. Log.d("Controller", "Touchcancel: " + index);
    28. }
    29. public void move(int index, float oldx, float oldy, float x, float y) {
    30. Log.d("Controller", "Move:" + index);
    31. }
    32. public void setSensitivities(float sensitivities) {
    33. sensitivitiesY = sensitivities;
    34. sensitivitiesX = sensitivities;
    35. }
    36. public void setSensitivitiesX(float sensitivitiesX) {
    37. this.sensitivitiesX = sensitivitiesX;
    38. }
    39. public void setSensitivitiesY(float sensitivitiesY) {
    40. this.sensitivitiesY = sensitivitiesY;
    41. }
    42. public void setScandelay(long scandelay) {
    43. this.scandelay = scandelay;
    44. }
    45. public View getView() {
    46. return view;
    47. }
    48. @Override
    49. public boolean onTouch(View v, MotionEvent event) {
    50. this.view = v;
    51. int pointerIndex = event.getActionIndex();
    52. int pointerId = event.getPointerId(pointerIndex);
    53. int action = event.getActionMasked();
    54. switch (action) {
    55. case MotionEvent.ACTION_DOWN:
    56. case MotionEvent.ACTION_POINTER_DOWN : {
    57. PointF f = new PointF();
    58. f.x = event.getX(pointerIndex);
    59. f.y = event.getY(pointerIndex);
    60. mActivePointers.put(pointerId, f);
    61. touchdown(pointerIndex,f.x,f.y);
    62. break;
    63. }
    64. case MotionEvent.ACTION_MOVE: {
    65. for (int size = event.getPointerCount(), i = 0; i < size; i++) {
    66. PointF point = mActivePointers.get(event.getPointerId(i));
    67. if (point != null) {
    68. float accx = event.getX(i),
    69. accy = event.getY(i);
    70. if(Math.abs(point.x - accx) > Math.abs(point.y - accy)) {
    71. if (accx - point.x > sensitivitiesX)
    72. left(i, point.x, point.y, accx, accy);
    73. if (point.x - accx > sensitivitiesX)
    74. right(i, point.x, point.y, accx, accy);
    75. } else {
    76. if (accy - point.y > sensitivitiesY)
    77. down(i, point.x, point.y, accx, accy);
    78. if (point.y - accy > sensitivitiesY)
    79. up(i, point.x, point.y, accx, accy);
    80. }
    81. point.x = accx;
    82. point.y = accy;
    83. }
    84. }
    85. try {
    86. Thread.sleep(scandelay);
    87. } catch (InterruptedException e) {
    88. e.printStackTrace();
    89. }
    90. break;
    91. }
    92. case MotionEvent.ACTION_UP:
    93. case MotionEvent.ACTION_POINTER_UP:
    94. case MotionEvent.ACTION_CANCEL: {
    95. PointF point = mActivePointers.get(pointerId);
    96. touchcancel(pointerIndex,point.x,point.y);
    97. mActivePointers.remove(pointerId);
    98. break;
    99. }
    100. }
    101. return true;
    102. }
    103. }
    Alles anzeigen

    Java-Quellcode: touchhelper

    1. public interface touchhelper {
    2. float sensitivitiesX = 50,
    3. sensitivitiesY = 50;
    4. long scandelay = 220;
    5. void left(int index, float oldx, float oldy, float x, float y);
    6. void right(int index, float oldx, float oldy, float x, float y);
    7. void up(int index, float oldx, float oldy, float x, float y);
    8. void down(int index, float oldx, float oldy, float x, float y);
    9. void touchdown(int index, float x, float y);
    10. void touchcancel(int index, float x, float y) ;
    11. void move(int index, float oldx, float oldy, float x, float y);
    12. void setSensitivities(float sensitivities);
    13. void setSensitivitiesX(float sensitivitiesX);
    14. void setSensitivitiesY(float sensitivitiesY);
    15. void setScandelay(long scandelay);
    16. View getView() ;
    17. }
    Alles anzeigen
  • Korrigier mich wenn ich falsch liege, aber Dein Start-Intent arbeitet bei "rechts" ein RECHTS ab.

    1. @Override
    2. public void right(int index, float oldx, float oldy, float x, float y) {
    3. super.right(index, oldx, oldy, x, y);
    und wenn ich mir das Konstrukt davor anschaue

    1. @Override
    2. public void left(int index, float oldx, float oldy, float x, float y) {
    3. super.right(index, oldx, oldy, x, y);
    4. Log.d("Coustom Controller", "Left: " + index);
    arbeitet er bei "links" ein RECHTS ab .....

    Muss das so ???

    Gruß Carsten
    Humor ist....wenn man trotzdem lacht :saint:
  • Ja, da hab ich vergessen, das ich schon etwas probiert habe,
    und das problen sieht man in den Log wenn ich von rechts nach links wische, dann sagt mir das nicht override links an aber das Instanzierte nicht, das ist es andersrum

    ändere ich #super.*, geht es, aber lass ich das orginal, so wie es sein müsste geht es nicht

    Java-Quellcode: Bearbeitet

    1. @Override
    2. public void left(int index, float oldx, float oldy, float x, float y) {
    3. super.right(index, oldx, oldy, x, y);
    4. Log.d("Coustom Controller", "Left: " + index);
    5. }
    6. @Override
    7. public void right(int index, float oldx, float oldy, float x, float y) {
    8. super.left(index, oldx, oldy, x, y);
    9. Log.d("Coustom Controller", "Right: " + index);
    10. }
    Alles anzeigen


    Java-Quellcode: Orginal

    1. @Override
    2. public void left(int index, float oldx, float oldy, float x, float y) {
    3. super.left(index, oldx, oldy, x, y);
    4. Log.d("Coustom Controller", "Left: " + index);
    5. }
    6. @Override
    7. public void right(int index, float oldx, float oldy, float x, float y) {
    8. super.right(index, oldx, oldy, x, y);
    9. Log.d("Coustom Controller", "Right: " + index);
    10. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Facebamm ()