private void setImage() {
// 获取屏幕宽高
metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
// 设置图片初始大小 这里我设为满屏的16:9,根据自己需要调整
ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) ivHeader.getLayoutParams();
lp.width = metric.widthPixels;
lp.height = metric.widthPixels * 9 / 16;
ivHeader.setLayoutParams(lp);
// 设置触摸的监听事件
mCeshi2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) ivHeader
.getLayoutParams();
switch (event.getAction()) {
//手指抬起时触发
case MotionEvent.ACTION_UP:
// 手指离开后恢复图片
mScaling = false;
replyImage();
break;
//手指移动时触发
case MotionEvent.ACTION_MOVE:
if (!mScaling) {
if (mCeshi2.getScrollY() == 0) {
mFirstPosition = event.getY();// 滚动到顶部时记录位置,否则正常返回
} else {
break;
}
}
int distance = (int) ((event.getY() - mFirstPosition) * 0.6); // 滚动距离乘以一个系数
if (distance < 0) { // 如果当前位置比记录位置要小,正常返回
break;
}
// 处理放大的关键代码
mScaling = true;
lp.width = metric.widthPixels + distance;
lp.height = (metric.widthPixels + distance) * 9 / 16;
ivHeader.setLayoutParams(lp);
return true; // 返回true表示已经消费该事件
}
return false;
}
});
}
// 手指抬起图片回弹动画 (使用了属性动画)
public void replyImage() {
final ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) ivHeader.getLayoutParams();
final float w = ivHeader.getLayoutParams().width;// 图片当前宽度
final float h = ivHeader.getLayoutParams().height;// 图片当前高度
final float newW = metric.widthPixels;// 图片原宽度
final float newH = metric.widthPixels * 9 / 16;// 图片原高度
// 设置动画
anim = ObjectAnimator.ofFloat(0.0F, 1.0F).setDuration(200);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float cVal = (Float) animation.getAnimatedValue();
lp.width = (int) (w - (w - newW) * cVal);
lp.height = (int) (h - (h - newH) * cVal);
ivHeader.setLayoutParams(lp);
}
});
//开启动画
anim.start();
}