注:本篇文章是对官方开发文档的翻译,加上自己的理解和分析。
地址:https://developer.android.com/training/animation/zoom
本篇文章所实现的功能:
触摸一张ImageView后开始展示缩放动画,将视图从缩略图放大为填充屏幕的全尺寸图像,并且点击大图后还能够原路返回,缩放回去。无图无真相,先来看看效果图:
实现的代码中你需要知道的一些理论知识(大神请忽略):
首先是View的两个方法:
getGlobalVisibleRect(Rect r) → 得到这个view的可视区域的矩形
getGlobalVisibleRect(Rect r, Point globalOffset) → 比上面的那个多了个参数,这个参数的内容是view的左上角相对屏幕左上角的偏移量
一开始看到这我是有点迷糊的,getGlobalVisibleRect中第二个参数到底是干啥用的?抱着这个疑问,我决定打个Log来看看,先看看用了哪些代码来打印:
//下面这个container就是当前的根布局的id,finalBounds就是新建的一个Rect,
findViewById(R.id.container)
.getGlobalVisibleRect(finalBounds, globalOffset);
//globalOffset里的偏移量
Log.i("TAG", "globalOffset.x:" + globalOffset.x);
Log.i("TAG", "globalOffset.y:" + globalOffset.y);
startBounds.offset(-globalOffset.x, -globalOffset.y);
finalBounds.offset(-globalOffset.x, -globalOffset.y);
//获取状态栏高度
int height = 0;
int resourceId = getApplicationContext().getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
height = getApplicationContext().getResources().getDimensionPixelSize(resourceId);
}
Log.i("TAG", "状态栏高度:" + height);
//获取actionBar的高度
int actionBarHeight = 0;
TypedValue tv = new TypedValue();
if (this.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
Log.i("TAG", "actionBar高度:" + actionBarHeight);
}
打印的log: