I developed a zoom control in android based on a tutorial: Android one finger zoom tutorial
public abstract class Dynamics {
private static final int MAX_TIMESTEP = 50;
protected float mPosition;
protected float mVelocity;
protected float mMaxPosition = Float.MAX_VALUE;
protected float mMinPosition = -Float.MAX_VALUE;
protected long mLastTime = 0;
public void setState(final float position, final float velocity, final long now) {
mVelocity = velocity;
mPosition = position;
mLastTime = now;
}
public float getPosition() {
return mPosition;
}
public float getVelocity() {
return mVelocity;
}
public boolean isAtRest(final float velocityTolerance, final float positionTolerance) {
final boolean standingStill = Math.abs(mVelocity) < velocityTolerance;
final boolean withinLimits = mPosition - positionTolerance < mMaxPosition
&& mPosition + positionTolerance > mMinPosition;
return standingStill && withinLimits;
}
public void setMaxPosition(final float maxPosition) {
mMaxPosition = maxPosition;
}
public void setMinPosition(final float minPosition) {
mMinPosition = minPosition;
}
public void update(final long now) {
int dt = (int)(now - mLastTime);
if (dt > MAX_TIMESTEP) {
dt = MAX_TIMESTEP;
}
onUpdate(dt);
mLastTime = now;
}
protected float getDistanceToLimit() {
float distanceToLimit = 0;
if (mPosition > mMaxPosition) {
distanceToLimit = mMaxPosition - mPosition;
} else if (mPosition < mMinPosition) {
distanceToLimit = mMinPosition - mPosition;
}
return distanceToLimit;
}
abstract protected void onUpdate(int dt);
}
public class SpringDynamics extends Dynamics {
private float mFriction;
private float mStiffness;
private float mDamping;
public void setFriction(float friction) {
mFriction = friction;
}
public void setSpring(float stiffness, float dampingRatio) {
mStiffness = stiffness;
mDamping = dampingRatio * 2 * (float)Math.sqrt(stiffness);
}
private float calculateAcceleration() {
float acceleration;
final float distanceFromLimit = getDistanceToLimit();
if (distanceFromLimit != 0) {
acceleration = distanceFromLimit * mStiffness - mDamping * mVelocity;
} else {
acceleration = -mFriction * mVelocity;
}
return acceleration;
}
@Override
protected void onUpdate(int dt) {
final float fdt = dt / 1000f;
final float a = calculateAcceleration();
mPosition += mVelocity * fdt + .5f * a * fdt * fdt;
mVelocity += a * fdt;
}
}
Can someone give me some idea on how to include image rotation in this as well (similar to iphone pinch)?
thank
source
share