1ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount/* 2ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * Copyright (C) 2014 The Android Open Source Project 3ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * 4ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * you may not use this file except in compliance with the License. 6ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * You may obtain a copy of the License at 7ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * 8ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * http://www.apache.org/licenses/LICENSE-2.0 9ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * 10ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * Unless required by applicable law or agreed to in writing, software 11ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * distributed under the License is distributed on an "AS IS" BASIS, 12ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * See the License for the specific language governing permissions and 14ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * limitations under the License. 15ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount */ 16ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountpackage android.transition; 17ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 18ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.content.Context; 19ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.graphics.Path; 20ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.util.AttributeSet; 21ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 22ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount/** 23ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * This base class can be extended to provide motion along a Path to Transitions. 24ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * 25ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <p> 26ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * Transitions such as {@link android.transition.ChangeBounds} move Views, typically 27ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * in a straight path between the start and end positions. Applications that desire to 28ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * have these motions move in a curve can change how Views interpolate in two dimensions 29ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * by extending PathMotion and implementing {@link #getPath(float, float, float, float)}. 30ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * </p> 31ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <p>This may be used in XML as an element inside a transition.</p> 32ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <pre> 33ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * {@code 34ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <changeBounds> 35ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <pathMotion class="my.app.transition.MyPathMotion"/> 36ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * </changeBounds> 37ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * } 38ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * </pre> 39ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount */ 40ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountpublic abstract class PathMotion { 41ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 42ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public PathMotion() {} 43ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 44ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public PathMotion(Context context, AttributeSet attrs) {} 45ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 46ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount /** 47ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * Provide a Path to interpolate between two points <code>(startX, startY)</code> and 48ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * <code>(endX, endY)</code>. This allows controlled curved motion along two dimensions. 49ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * 50ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * @param startX The x coordinate of the starting point. 51ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * @param startY The y coordinate of the starting point. 52ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * @param endX The x coordinate of the ending point. 53ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * @param endY The y coordinate of the ending point. 54ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * @return A Path along which the points should be interpolated. The returned Path 55ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * must start at point <code>(startX, startY)</code>, typically using 56ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount * {@link android.graphics.Path#moveTo(float, float)} and end at <code>(endX, endY)</code>. 57ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount */ 58ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public abstract Path getPath(float startX, float startY, float endX, float endY); 59ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount} 60