1317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki/* 2317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * Copyright (C) 2017 The Android Open Source Project 3317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * 4317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * you may not use this file except in compliance with the License. 6317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * You may obtain a copy of the License at 7317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * 8317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * 10317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * Unless required by applicable law or agreed to in writing, software 11317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * See the License for the specific language governing permissions and 14317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * limitations under the License. 15317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki */ 16317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki 17317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Arakipackage android.support.transition; 18317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki 19142a5654b5eff546b6fa1b9b938896356ff9b03bYuichi Arakiimport android.content.Context; 20317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Arakiimport android.graphics.Path; 21142a5654b5eff546b6fa1b9b938896356ff9b03bYuichi Arakiimport android.util.AttributeSet; 22317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki 23317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki/** 24317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * This base class can be extended to provide motion along a Path to Transitions. 25317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * 26317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * <p> 27317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * Transitions such as {@link android.transition.ChangeBounds} move Views, typically 28317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * in a straight path between the start and end positions. Applications that desire to 29317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * have these motions move in a curve can change how Views interpolate in two dimensions 30317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * by extending PathMotion and implementing {@link #getPath(float, float, float, float)}. 31317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * </p> 32b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * <p>This may be used in XML as an element inside a transition.</p> 33b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * <pre> 34b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * {@code 35b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * <changeBounds> 36b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * <pathMotion class="my.app.transition.MyPathMotion"/> 37b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * </changeBounds> 38b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * } 39b97d1415b97f0c695f4c2e79c935141d9954274eYuichi Araki * </pre> 40317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki */ 41317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Arakipublic abstract class PathMotion { 42317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki 43317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki public PathMotion() { 44317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki } 45317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki 46142a5654b5eff546b6fa1b9b938896356ff9b03bYuichi Araki public PathMotion(Context context, AttributeSet attrs) { 47142a5654b5eff546b6fa1b9b938896356ff9b03bYuichi Araki } 48142a5654b5eff546b6fa1b9b938896356ff9b03bYuichi Araki 49317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki /** 50317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * Provide a Path to interpolate between two points <code>(startX, startY)</code> and 51317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * <code>(endX, endY)</code>. This allows controlled curved motion along two dimensions. 52317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * 53317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * @param startX The x coordinate of the starting point. 54317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * @param startY The y coordinate of the starting point. 55317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * @param endX The x coordinate of the ending point. 56317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * @param endY The y coordinate of the ending point. 57317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * @return A Path along which the points should be interpolated. The returned Path 58317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * must start at point <code>(startX, startY)</code>, typically using 59317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki * {@link android.graphics.Path#moveTo(float, float)} and end at <code>(endX, endY)</code>. 60317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki */ 61317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki public abstract Path getPath(float startX, float startY, float endX, float endY); 62317d4bb802dbd80c9ddf1382e037769e58dff919Yuichi Araki} 63