18aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson/* 28aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * Copyright (C) 2016 The Android Open Source Project 38aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * 48aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * Licensed under the Apache License, Version 2.0 (the "License"); 58aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * you may not use this file except in compliance with the License. 68aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * You may obtain a copy of the License at 78aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * 88aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * http://www.apache.org/licenses/LICENSE-2.0 98aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * 108aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * Unless required by applicable law or agreed to in writing, software 118aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * distributed under the License is distributed on an "AS IS" BASIS, 128aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * See the License for the specific language governing permissions and 148aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * limitations under the License. 158aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson */ 168aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinsonpackage com.android.systemui.recents.misc; 178aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson 188aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinsonimport android.animation.TypeEvaluator; 198aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinsonimport android.graphics.RectF; 208aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson 218aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson/** 228aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * This evaluator can be used to perform type interpolation between <code>RectF</code> values. 238aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson */ 248aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinsonpublic class RectFEvaluator implements TypeEvaluator<RectF> { 258aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson 268aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson private RectF mRect = new RectF(); 278aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson 288aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson /** 298aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * This function returns the result of linearly interpolating the start and 308aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * end Rect values, with <code>fraction</code> representing the proportion 318aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * between the start and end values. The calculation is a simple parametric 328aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * calculation on each of the separate components in the Rect objects 338aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * (left, top, right, and bottom). 348aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * 358aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * <p>The object returned will be the <code>reuseRect</code> passed into the constructor.</p> 368aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * 378aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * @param fraction The fraction from the starting to the ending values 388aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * @param startValue The start Rect 398aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * @param endValue The end Rect 408aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * @return A linear interpolation between the start and end values, given the 418aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson * <code>fraction</code> parameter. 428aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson */ 438aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson @Override 448aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson public RectF evaluate(float fraction, RectF startValue, RectF endValue) { 458aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson float left = startValue.left + ((endValue.left - startValue.left) * fraction); 468aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson float top = startValue.top + ((endValue.top - startValue.top) * fraction); 478aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson float right = startValue.right + ((endValue.right - startValue.right) * fraction); 488aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson float bottom = startValue.bottom + ((endValue.bottom - startValue.bottom) * fraction); 498aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson mRect.set(left, top, right, bottom); 508aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson return mRect; 518aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson } 528aa9959413a06c3d2ff75e0c7be9e3cb7ac7cd2eWinson} 53