1399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung/* 2399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * Copyright (C) 2014 The Android Open Source Project 3399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * 4399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 5399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * you may not use this file except in compliance with the License. 6399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * You may obtain a copy of the License at 7399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * 8399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * http://www.apache.org/licenses/LICENSE-2.0 9399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * 10399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * Unless required by applicable law or agreed to in writing, software 11399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * distributed under the License is distributed on an "AS IS" BASIS, 12399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * See the License for the specific language governing permissions and 14399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * limitations under the License. 15399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung */ 16399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 17399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chungpackage android.view.animation; 18399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 19399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chungimport android.graphics.Rect; 20399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 21399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung/** 22399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * An animation that controls the clip of an object. See the 23399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * {@link android.view.animation full package} description for details and 24399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * sample code. 25399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * 26399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * @hide 27399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung */ 28399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chungpublic class ClipRectAnimation extends Animation { 2910e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase protected Rect mFromRect = new Rect(); 3010e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase protected Rect mToRect = new Rect(); 31399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 32399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung /** 33399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * Constructor to use when building a ClipRectAnimation from code 34399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * 35399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * @param fromClip the clip rect to animate from 36399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung * @param toClip the clip rect to animate to 37399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung */ 38399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung public ClipRectAnimation(Rect fromClip, Rect toClip) { 39399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung if (fromClip == null || toClip == null) { 40399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung throw new RuntimeException("Expected non-null animation clip rects"); 41399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung } 42399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung mFromRect.set(fromClip); 43399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung mToRect.set(toClip); 44399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung } 45399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 4610e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase /** 4710e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase * Constructor to use when building a ClipRectAnimation from code 4810e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase */ 4910e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase public ClipRectAnimation(int fromL, int fromT, int fromR, int fromB, 5010e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase int toL, int toT, int toR, int toB) { 5110e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase mFromRect.set(fromL, fromT, fromR, fromB); 5210e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase mToRect.set(toL, toT, toR, toB); 5310e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase } 5410e23ab61b820fb3149b2f89003753d98ebd6a80Chet Haase 55399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung @Override 56399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung protected void applyTransformation(float it, Transformation tr) { 57399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung int l = mFromRect.left + (int) ((mToRect.left - mFromRect.left) * it); 58399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung int t = mFromRect.top + (int) ((mToRect.top - mFromRect.top) * it); 59399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung int r = mFromRect.right + (int) ((mToRect.right - mFromRect.right) * it); 60399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung int b = mFromRect.bottom + (int) ((mToRect.bottom - mFromRect.bottom) * it); 61399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung tr.setClipRect(l, t, r, b); 62399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung } 63399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung 64399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung @Override 65399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung public boolean willChangeTransformationMatrix() { 66399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung return false; 67399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung } 68399f62052a88e5e7628b7312637ae54fbbaa4becWinson Chung} 69