android防qq空间弹窗,Android高级UI之防QQ空间效果

本文介绍如何在Android应用中模仿QQ空间的图片轮播效果,通过自定义ListView实现头部图片动态缩放。关键步骤包括设置listView头视图、使用ImageView进行缩放动画,并在触摸事件中触发动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android高级UI之防QQ空间效果

b4c446b893f3

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值