package com.jecelyin.widget;
import jecelyin.android.compat.TextViewBase;
import com.jecelyin.editor.EditorSettings;
import android.util.FloatMath;
import android.view.MotionEvent;
public class TouchZoom
{
private static final int TOUCH_DRAG_START_MODE = 1;
private static final int TOUCH_DONE_MODE = 2;
private int mTouchMode;
/** 记录按下第二个点距第一个点的距离 */
private float oldDist;
/** 缩放比例 */
private float scale = 0.5f;
/** 设置字体大小 */
private float mTextSize;
private TextViewBase mTextViewBase;
public TouchZoom(TextViewBase tvb)
{
mTextViewBase = tvb;
}
public boolean onTouchEvent(MotionEvent event)
{
if(!EditorSettings.ENABLE_TOUCH_ZOOM || !EditorSettings.MULTI_TOUCH)
return false;
final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_POINTER_DOWN && event.getPointerCount() >= 2) {
mTouchMode = TOUCH_DRAG_START_MODE;
oldDist = calc_spacing(event);
return true;
} else if (action == MotionEvent.ACTION_POINTER_UP && mTouchMode == TOUCH_DRAG_START_MODE) {
mTouchMode = TOUCH_DONE_MODE;
return true;
} else if(action == MotionEvent.ACTION_MOVE && mTouchMode == TOUCH_DRAG_START_MODE && event.getPointerCount() >= 2)
{
mTextViewBase.cancelLongPress();
// 正在移动的点距初始点的距离
float newDist = calc_spacing(event);
if(Math.abs(newDist - oldDist) > 10f)
{
if(newDist > oldDist)
{
zoomOut();
}else if(newDist < oldDist)
{
zoomIn();
}
oldDist = newDist;
}
return true;
}
return false;
}
/**
* 求出2个触点间的 距离
*
* @param event
* @return
*/
private float calc_spacing(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
/**
* 放大
*/
protected void zoomOut()
{
mTextSize += scale;
if(mTextSize > EditorSettings.MAX_TEXT_SIZE)
mTextSize = EditorSettings.MAX_TEXT_SIZE;
else if(mTextSize < EditorSettings.MIN_TEXT_SIZE)
mTextSize = EditorSettings.MIN_TEXT_SIZE;
mTextViewBase.setTextSize(mTextSize);
}
/**
* 缩小
*/
protected void zoomIn()
{
mTextSize -= scale;
if(mTextSize > EditorSettings.MAX_TEXT_SIZE)
mTextSize = EditorSettings.MAX_TEXT_SIZE;
else if(mTextSize < EditorSettings.MIN_TEXT_SIZE)
mTextSize = EditorSettings.MIN_TEXT_SIZE;
mTextViewBase.setTextSize(mTextSize);
}
}