2016-04-28 15 views
1

私は特定の境界にあるtoucheventsに基づいてタップされた3つのボタンを持っており、tapventsをタップの代わりに長押しするように変更したいと思っています。私はこれを行う方法がわかりません。長押しTouchevents

private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) { 
// 1. All touch input is handled here: 
int len = touchEvents.size(); 
for (int i = 0; i < len; i++) { 
TouchEvent event = touchEvents.get(i); 

if (event.type == TouchEvent.TOUCH_DOWN) { 

if (inBounds(event, 340,512,140,140)) { 
B1Pressed = true; 
Log.d("GameScreen", "Button 1 Pressed"); 
// Button 1 
} 

if (inBounds(event, 340,320,140,140)) { 
B2Pressed = true; 
Log.d("GameScreen", "Button 2 Pressed"); 
// Button 2 
} 

if (inBounds(event, 340,120,140,140)) { 
    B3Pressed = true; 
    Log.d("GameScreen", "Button 3 Pressed"); 
// Button 3 
} 

} 

private boolean inBounds(TouchEvent event, int x, int y, int width, 
     int height) { 
    if (event.x > x && event.x < x + width - 1 && event.y > y 
      && event.y < y + height - 1) 
     return true; 
    else 
     return false; 
} 

Input.java:ここに私の関連するコードです

public interface Input { 

public static class TouchEvent { 
    public static final int TOUCH_DOWN = 0; 
    public static final int TOUCH_UP = 1; 
    public static final int TOUCH_DRAGGED = 2; 
    public static final int TOUCH_HOLD = 3; 

    public int type; 
    public int x, y; 
    public int pointer; 


} 

public boolean isTouchDown(int pointer); 

public int getTouchX(int pointer); 

public int getTouchY(int pointer); 

public List<TouchEvent> getTouchEvents(); 
} 

TouchHandler.java:

public interface TouchHandler extends OnTouchListener { 
public boolean isTouchDown(int pointer); 

public int getTouchX(int pointer); 

public int getTouchY(int pointer); 

public List<TouchEvent> getTouchEvents(); 
} 

SingleTouchHandler:私は実装に取り​​掛かることができますどのように

public class SingleTouchHandler implements TouchHandler { 
boolean isTouched; 
int touchX; 
int touchY; 
Pool<TouchEvent> touchEventPool; 
List<TouchEvent> touchEvents = new ArrayList<TouchEvent>(); 
List<TouchEvent> touchEventsBuffer = new ArrayList<TouchEvent>(); 
float scaleX; 
float scaleY; 

public SingleTouchHandler(View view, float scaleX, float scaleY) { 
    PoolObjectFactory<TouchEvent> factory = new PoolObjectFactory<TouchEvent>() { 
     @Override 
     public TouchEvent createObject() { 
      return new TouchEvent(); 
     }    
    }; 
    touchEventPool = new Pool<TouchEvent>(factory, 100); 
    view.setOnTouchListener(this); 

    this.scaleX = scaleX; 
    this.scaleY = scaleY; 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    synchronized(this) { 
     TouchEvent touchEvent = touchEventPool.newObject(); 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      touchEvent.type = TouchEvent.TOUCH_DOWN; 
      isTouched = true; 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touchEvent.type = TouchEvent.TOUCH_DRAGGED; 
      isTouched = true; 
      break; 
     case MotionEvent.ACTION_CANCEL:     
     case MotionEvent.ACTION_UP: 
      touchEvent.type = TouchEvent.TOUCH_UP; 
      isTouched = false; 
      break; 
     } 

     touchEvent.x = touchX = (int)(event.getX() * scaleX); 
     touchEvent.y = touchY = (int)(event.getY() * scaleY); 
     touchEventsBuffer.add(touchEvent);       

     return true; 
    } 
} 

@Override 
public boolean isTouchDown(int pointer) { 
    synchronized(this) { 
     if(pointer == 0) 
      return isTouched; 
     else 
      return false; 
    } 
} 

@Override 
public int getTouchX(int pointer) { 
    synchronized(this) { 
     return touchX; 
    } 
} 

@Override 
public int getTouchY(int pointer) { 
    synchronized(this) { 
     return touchY; 
    } 
} 

@Override 
public List<TouchEvent> getTouchEvents() { 
    synchronized(this) {  
     int len = touchEvents.size(); 
     for(int i = 0; i < len; i++) 
      touchEventPool.free(touchEvents.get(i)); 
     touchEvents.clear(); 
     touchEvents.addAll(touchEventsBuffer); 
     touchEventsBuffer.clear(); 
     return touchEvents; 
    } 
} 
} 

長押し?

答えて

0

あなたのクラスは

SingleTouchHandler Implements View.OnLongClickListener 
     @Override 
    public boolean onLongClick(View v) { 
    return false; 
    } 

としてView.OnLongClickListenerを実装してみましょう、あなたはこれが

を役に立てば幸い長押しopertaionsを実行する方法を取得します
関連する問題