Back to project page DiceInDark.
The source code is released under:
GNU General Public License
If you think the Android project DiceInDark listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* Dice in the dark. D & D app for the blind and seeing impaired, * Copyright (C) <2013r> <Lovisa Irpa Helgadottir> *//from w ww .j a v a 2 s .c o m * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.plovergames.framework.impl; import java.util.ArrayList; import java.util.List; import com.plovergames.framework.Input.GestureEvent; import com.plovergames.framework.Input.TouchEvent; import com.plovergames.framework.Pool.PoolObjectFactory; import com.plovergames.framework.Pool; import android.content.Context; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; public class GestureHandler implements TouchHandler{ private static final int MAX_TOUCHPOINTS = 10; boolean[] isTouched = new boolean[MAX_TOUCHPOINTS]; int[] touchX = new int[MAX_TOUCHPOINTS]; int[] touchY = new int[MAX_TOUCHPOINTS]; int[] id = new int[MAX_TOUCHPOINTS]; private GestureDetector gestures; Pool<GestureEvent> gestureEventPool; List<GestureEvent> gestureEvents = new ArrayList<GestureEvent>(); List<GestureEvent> gestureEventsBuffer = new ArrayList<GestureEvent>(); public GestureHandler(Context context, View view) { PoolObjectFactory<GestureEvent> factory1 = new PoolObjectFactory<GestureEvent>() { public GestureEvent createObject() { return new GestureEvent(); } }; gestureEventPool = new Pool<GestureEvent>(factory1, 100); gestures = new GestureDetector(context, new GestureListener(this)); view.setOnTouchListener(this); } public boolean onTouch(View v, MotionEvent event) { synchronized (this) { gestures.onTouchEvent(event); return true; } } public boolean isTouchDown(int pointer) { synchronized (this) { int index = getIndex(pointer); if (index < 0 || index >= MAX_TOUCHPOINTS) return false; else return isTouched[index]; } } public int getTouchX(int pointer) { synchronized (this) { int index = getIndex(pointer); if (index < 0 || index >= MAX_TOUCHPOINTS) return 0; else return touchX[index]; } } public int getTouchY(int pointer) { synchronized (this) { int index = getIndex(pointer); if (index < 0 || index >= MAX_TOUCHPOINTS) return 0; else return touchY[index]; } } public List<TouchEvent> getTouchEvents() { return null; } public List<GestureEvent> getGestureEvents() { synchronized (this) { int len = gestureEvents.size(); for (int i = 0; i < len; i++) gestureEventPool.free(gestureEvents.get(i)); gestureEvents.clear(); gestureEvents.addAll(gestureEventsBuffer); gestureEventsBuffer.clear(); return gestureEvents; } } // returns the index for a given pointerId or -1 if no index. private int getIndex(int pointerId) { for (int i = 0; i < MAX_TOUCHPOINTS; i++) { if (id[i] == pointerId) { return i; } } return -1; } } class GestureListener implements OnGestureListener, OnDoubleTapListener { private static final String DEBUG_TAG = "GestureListener"; GestureHandler handler; public GestureListener(GestureHandler handler){ this.handler = handler; } @Override public boolean onDown(MotionEvent e) { Log.v(DEBUG_TAG, "onDown"); return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, final float velocityX, final float velocityY) { Log.v(DEBUG_TAG, "onFling"); GestureEvent event; event = handler.gestureEventPool.newObject(); float diffX =e1.getRawX()-e2.getRawX(); float diffY =e1.getRawY()-e2.getRawY(); if(Math.abs(diffX)>Math.abs(diffY)){ if(diffX<0) event.type= GestureEvent.FLING_RIGHT; else event.type = GestureEvent.FLING_LEFT; }else{ if(diffY<0) event.type=GestureEvent.SCROLL_UP; else event.type = GestureEvent.SCROLL_DOWN; } handler.gestureEventsBuffer.add(event); return true; } @Override public boolean onDoubleTap(MotionEvent e) { Log.v(DEBUG_TAG, "onDoubleTap"); GestureEvent event; event = handler.gestureEventPool.newObject(); event.type = GestureEvent.DOUBLE_TAP; handler.gestureEventsBuffer.add(event); return true; } @Override public void onLongPress(MotionEvent e) { Log.v(DEBUG_TAG, "onLongPress"); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.v(DEBUG_TAG, "onScroll"); /* GestureEvent event; event = handler.gestureEventPool.newObject(); float diff =e1.getRawY()-e2.getRawY(); if(Math.abs(diff)>Math.abs(e1.getRawX()-e2.getRawX())){ if(diff<0) event.type= GestureEvent.SCROLL_UP; else event.type = GestureEvent.SCROLL_DOWN; handler.gestureEventsBuffer.add(event); }*/ return false; } @Override public void onShowPress(MotionEvent e) { Log.v(DEBUG_TAG, "onShowPress"); } @Override public boolean onSingleTapUp(MotionEvent e) { Log.v(DEBUG_TAG, "onSingleTapUp"); GestureEvent event; event = handler.gestureEventPool.newObject(); event.type = GestureEvent.SINGLE_TAP; handler.gestureEventsBuffer.add(event); return true; } @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.v(DEBUG_TAG, "onDoubleTapEvent"); return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.v(DEBUG_TAG, "onSingleTapConfirmed"); return false; } }