/**
* @file GestureBoard.java
*
* @revision: none
*
* @version 0.0.01
* @author: Zenki (zhajun), zenki2001cn@163.com
* @date: 2011-6-25 下午12:14:35
*/
package com.easyview.ebook.reader.engine.util.motion;
import java.util.ArrayList;
import java.util.List;
import com.easyview.ebook.reader.engine.util.Logger;
import com.easyview.ebook.reader.engine.util.motion.GestureObject.GestureDirection;
import android.graphics.PointF;
import android.graphics.RectF;
public class GestureBoard {
static private final String TAG = "GestureBoard";
private RectF mBoardRange;
private List<PointF> mPointList;
private RectF[] mRectList;
private GestureObject mGesture;
private final int BOARD_H_SPLIT = 3;
private final int BOARD_V_SPLIT = 3;
public GestureBoard(RectF rect, List<PointF> pl) {
mBoardRange = rect;
mPointList = pl;
mGesture = new GestureObject();
initBoard();
}
private void initBoard() {
mRectList = new RectF[BOARD_H_SPLIT * BOARD_V_SPLIT];
float left;
float top;
float right;
float bottom;
float leftT = mBoardRange.left;
float topT = mBoardRange.top;
float rightT = mBoardRange.right;
float bottomT = mBoardRange.bottom;
// Logger.dLog(TAG, " leftT = " + leftT + " topT = " + topT + " rightT = "
// + rightT + " bottomT = " + bottomT);
float w = mBoardRange.width() / BOARD_H_SPLIT;
float h = mBoardRange.height() / BOARD_V_SPLIT;
for (int i = 0; i < BOARD_H_SPLIT; i++) {
for (int j = 0; j < BOARD_V_SPLIT; j++) {
left = leftT + i * w;
top = topT + j * h;
right = left + w;
bottom = top + h;
// Logger.dLog(TAG, "id = " + (j * BOARD_V_SPLIT + i) + " left = "
// + left + " top = " + top + " right = " + right
// + " bottom = " + bottom);
mRectList[j * BOARD_V_SPLIT + i] = new RectF();
mRectList[j * BOARD_V_SPLIT + i].set(left, top, right, bottom);
}
}
}
private int getDirection(PointF pt) {
int direct = GestureDirection.DIRECT_UNKNOW;
// Logger.dLog(TAG, "getDirection x= " + pt.x + " y= " + pt.y);
if (mRectList[0].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_NE;
} else if (mRectList[1].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_N;
} else if (mRectList[2].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_NW;
} else if (mRectList[3].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_E;
} else if (mRectList[4].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_C;
} else if (mRectList[5].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_W;
} else if (mRectList[6].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_SE;
} else if (mRectList[7].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_S;
} else if (mRectList[8].contains(pt.x, pt.y)) {
direct = GestureDirection.DIRECT_SW;
}
return direct;
}
private String getGestureType() {
int lastDirect = GestureDirection.DIRECT_UNKNOW;
int curDirect;
StringBuilder builder = new StringBuilder();
for (PointF pt : mPointList) {
curDirect = getDirection(pt);
// Logger.dLog(TAG, "getGestureType curDirect = " + curDirect);
if ((curDirect == lastDirect)
|| (GestureDirection.DIRECT_UNKNOW == curDirect)) {
continue;
} else {
lastDirect = curDirect;
builder.append(curDirect);
}
}
return builder.toString();
}
public GestureObject getGesture() {
mGesture.setGestureElement(getGestureType());
return mGesture;
}
}