/* * Copyright (c) 2012 Jason Polites Licensed under the Apache License, Version * 2.0 (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law * or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package com.tweetlanes.android.core.widget.gestureimageview; /** * @author Jason Polites */ class Animator extends Thread { private final GestureImageView mView; private Animation mAnimation; private boolean mRunning = false; private boolean mActive = false; private long mLastTime = -1L; public Animator(GestureImageView view, String threadName) { super(threadName); this.mView = view; } @Override public void run() { mRunning = true; while (mRunning) { while (mActive && mAnimation != null) { long time = System.currentTimeMillis(); mActive = mAnimation.update(mView, time - mLastTime); mView.redraw(); mLastTime = time; while (mActive) { try { if (mView.waitForDraw(32)) { // 30Htz break; } } catch (InterruptedException ignore) { mActive = false; } } } synchronized (this) { if (mRunning) { try { wait(); } catch (InterruptedException ignore) { } } } } } public synchronized void finish() { mRunning = false; mActive = false; notifyAll(); } public void play(Animation transformer) { if (mActive) { cancel(); } this.mAnimation = transformer; activate(); } synchronized void activate() { mLastTime = System.currentTimeMillis(); mActive = true; notifyAll(); } public void cancel() { mActive = false; } }