1fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki/* 2fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * Copyright (C) 2017 The Android Open Source Project 3fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * 4fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * you may not use this file except in compliance with the License. 6fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * You may obtain a copy of the License at 7fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * 8fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * 10fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * Unless required by applicable law or agreed to in writing, software 11fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * See the License for the specific language governing permissions and 14fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki * limitations under the License. 15fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki */ 16fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 17fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakipackage android.support.transition; 18fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 19fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiimport android.animation.Animator; 20fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiimport android.animation.AnimatorListenerAdapter; 21fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiimport android.graphics.Matrix; 22fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiimport android.support.annotation.RequiresApi; 23fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiimport android.widget.ImageView; 24fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 25fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki@RequiresApi(14) 26fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Arakiclass ImageViewUtilsApi14 implements ImageViewUtilsImpl { 27fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 28fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki @Override 29fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki public void startAnimateTransform(ImageView view) { 30fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki final ImageView.ScaleType scaleType = view.getScaleType(); 31fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setTag(R.id.save_scale_type, scaleType); 32fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki if (scaleType == ImageView.ScaleType.MATRIX) { 33fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setTag(R.id.save_image_matrix, view.getImageMatrix()); 34fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } else { 35fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setScaleType(ImageView.ScaleType.MATRIX); 36fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 37fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setImageMatrix(MatrixUtils.IDENTITY_MATRIX); 38fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 39fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 40fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki @Override 41fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki public void animateTransform(ImageView view, Matrix matrix) { 42fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setImageMatrix(matrix); 43fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 44fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 45fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki @Override 46fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki public void reserveEndAnimateTransform(final ImageView view, Animator animator) { 47fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki animator.addListener(new AnimatorListenerAdapter() { 48fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki @Override 49fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki public void onAnimationEnd(Animator animation) { 50fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki final ImageView.ScaleType scaleType = (ImageView.ScaleType) 51fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.getTag(R.id.save_scale_type); 52fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setScaleType(scaleType); 53fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setTag(R.id.save_scale_type, null); 54fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki if (scaleType == ImageView.ScaleType.MATRIX) { 55fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setImageMatrix((Matrix) view.getTag(R.id.save_image_matrix)); 56fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki view.setTag(R.id.save_image_matrix, null); 57fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 58fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki animation.removeListener(this); 59fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 60fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki }); 61fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki } 62fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki 63fdfa819aa29e12734eb90101f5f40d2636a5f1aeYuichi Araki} 64