Back to project page AndroidGameDev.
The source code is released under:
Apache License
If you think the Android project AndroidGameDev listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package cc.rafazz.framework.implementation; // ww w . j a v a 2 s.c o m import java.util.ArrayList; import java.util.List; import android.view.MotionEvent; import android.view.View; import cc.rafazz.framework.Input.TouchEvent; import cc.rafazz.framework.Pool; import cc.rafazz.framework.Pool.PoolObjectFactory; 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; } } }