/**
* Copyright (C) 2013- Iordan Iordanov
*
* This 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 software 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 software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
package com.undatech.opaque.input;
import com.undatech.opaque.RemoteCanvas;
import android.os.Handler;
import android.view.KeyEvent;
public class PanRepeater implements Runnable {
private RemoteCanvas canvas = null;
private Handler handler = null;
// Used to hold current velocity
private float velocityX;
private float velocityY;
// Delay next scheduled pan by this value.
int delay = 5;
// Multiplier used to reduce initial velocity.
static final float speedFactor = 0.008f;
public PanRepeater (RemoteCanvas canvas, Handler handler) {
this.canvas = canvas;
this.handler = handler;
}
public void start (float velocityX, float velocityY) {
stop();
this.velocityX = velocityX*speedFactor;
this.velocityY = velocityY*speedFactor;
//android.util.Log.i ("PanRepeater", "Initial velocities: " + velocityX + "x" + velocityY);
handler.post(this);
}
public void stop () {
handler.removeCallbacks(this);
}
@Override
public void run() {
float pX = Math.abs(velocityX);
float pY = Math.abs(velocityY);
if (pX >= 1 || pY >= 1) {
//android.util.Log.i ("PanRepeater", "Panning by: " + velocityX + "x" + velocityY);
canvas.relativePan((int)velocityX, (int)velocityY);
velocityX = velocityX / 1.23f;
velocityY = velocityY / 1.23f;
handler.postDelayed(this, delay);
}
}
}