Android高级UI之防QQ空间效果
QQ图片20191210234412.gif
实现思路:给listVIew添加head,然后改变head高度
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qzone);
QzoneHearSrollView listview = findViewById(R.id.list);
ArrayAdapter adapter =new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
new String[]{
"星期一 和马云洽谈",
"星期二 约见李彦宏",
"星期三 约见乔布斯",
"星期四 和Lance钓鱼",
"星期五 和Jett洽谈",
"星期六 和Jason洽谈",
"星期日 和MZ洽谈",
"星期一 和马云洽谈",
"星期二 约见李彦宏",
"星期三 约见乔布斯",
"星期四 和Ricky钓鱼",
"星期五 和David洽谈",
"星期六 和Jason洽谈",
"星期日 和MZ洽谈",
"……"
}
);
View head = View.inflate(this, R.layout.listview_header, null);
ImageView imageView = head.findViewById(R.id.layout_header_image);
listview.setZoomImgView(imageView);
listview.addHeaderView(head);
listview.setAdapter(adapter);
}
QzoneHearSrollView
package wwh.dn.com.lsn22_ui_zongjie.qzone_demo;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.OvershootInterpolator;
import android.view.animation.Transformation;
import android.widget.ImageView;
import android.widget.ListView;
import wwh.dn.com.lsn22_ui_zongjie.R;
/**
* 简书:低能儿_啊Paul https://www.jianshu.com/u/eb7655f1d79d
* date 2019/12/10.
*/
public class QzoneHearSrollView extends ListView {
private ImageView mZoomImgView;
private int mZoomImgViewHeigth;
public QzoneHearSrollView(Context context) {
super(context);
}
public QzoneHearSrollView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mZoomImgViewHeigth = context.getResources().getDimensionPixelOffset(R.dimen.size_default_height);
}
public void setZoomImgView(ImageView zoomImgView) {
this.mZoomImgView = zoomImgView;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_UP) {
ReseAnimation reseAnimation=new ReseAnimation(mZoomImgViewHeigth);
reseAnimation.setInterpolator(new OvershootInterpolator());//有波动的迭代器
reseAnimation.setDuration(700);
mZoomImgView.startAnimation(reseAnimation);
}
return super.onTouchEvent(ev);
}
public class ReseAnimation extends Animation {
private int extraHeigth;//增加的高低
private int currentHeigth;//当前的高低
public ReseAnimation(int targetHeigth) {
currentHeigth = mZoomImgView.getHeight();
extraHeigth = mZoomImgView.getHeight() - targetHeigth;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
mZoomImgView.getLayoutParams().height = (int) (currentHeigth - extraHeigth * interpolatedTime);
mZoomImgView.requestLayout();
super.applyTransformation(interpolatedTime, t);
}
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
mZoomImgView.getLayoutParams().height = mZoomImgView.getHeight() - deltaY / 3;
mZoomImgView.requestLayout();
Log.d("WWh", "overScrollBy: " + deltaY);
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
}