动态头像 Android 实现,Android开发中实现一个头像滑动变大变小功能
Android开发中实现一个头像滑动变大变小功能
发布时间:2020-11-21 16:36:20
来源:亿速云
阅读:74
作者:Leah
这篇文章给大家介绍Android开发中实现一个头像滑动变大变小功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
实现
通过监听ScrollView在Y轴的滑动距离,然后在代码中动态设置头像的位置和大小。
public class MainActivity extends AppCompatActivity {
private CircleImageView ivPortrait;
private ObservableScrollView scrollView;
private ViewGroup.MarginLayoutParams marginLayoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
ivPortrait = (CircleImageView) findViewById(R.id.iv_portrait);
scrollView = (ObservableScrollView) findViewById(R.id.scrollView);
marginLayoutParams = new ViewGroup.MarginLayoutParams(ivPortrait.getLayoutParams());
scrollView.setScrollViewListener(new ObservableScrollView.ScrollViewListener() {
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
// 设置头像距离顶部的距离
int top = dp2px(70) - y;
if (top < dp2px(10)) {
// 固定在标题栏
marginLayoutParams.setMargins(dp2px(20), dp2px(10), 0, 0);
} else {
// 向上移动
marginLayoutParams.setMargins(dp2px(20), dp2px(70) - y, 0, 0);
}
// 根据向上滑动的距离设置头像的大小
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(marginLayoutParams);
// 头像最大为45dp,最小为30dp
int height = dp2px(45) - y < dp2px(30) ? dp2px(30) : dp2px(45) - y;
layoutParams.height = height;
layoutParams.width = height;
ivPortrait.setLayoutParams(layoutParams);
}
});
}
private int dp2px(float dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
}
}
布局文件
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#F2F4F7">
...
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:scrollbars="none">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="#F2F4F7">
...
android:layout_width="match_parent"
android:layout_height="1000dp" />
android:id="@+id/iv_portrait"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="70dp"
android:src="@mipmap/ic_portrait" />
原生的ScrollView是不支持滑动监听的,需要自定义一个ObservableScrollView。
public class ObservableScrollView extends ScrollView {
private ScrollViewListener scrollViewListener;
public ObservableScrollView(Context context) {
super(context);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
public interface ScrollViewListener {
void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
}
}
关于Android开发中实现一个头像滑动变大变小功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
动态头像 Android 实现,Android开发中实现一个头像滑动变大变小功能相关推荐
- Android短视频开发中的sdk接入方案
目前短视频平台非常火,云豹科技作为优质的app源码提供商,在短视频开发领域有丰富的经验和完善的技术.下面以云豹短视频为例,概述Android短视频开发中的sdk接入方案,这里我们选择腾讯云的sdk进行 ...
- 树莓派Android Things物联网开发:创建一个Things项目
[转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...
- android中布局全屏,怎么在Android 应用中实现一个全屏与非全屏功能
怎么在Android 应用中实现一个全屏与非全屏功能 发布时间:2020-12-04 17:31:45 来源:亿速云 阅读:135 作者:Leah 怎么在Android 应用中实现一个全屏与非全屏功能 ...
- Ubuntu2004,虚拟机中使用,解决系统图标变大变小以及分辨率降低问题
Ubuntu2004,虚拟机中使用,解决系统图标变大变小以及分辨率降低问题 下午实验室突然断电,来电后一打开电脑发现Ubuntu系统显示变形了,在网上找到的解决方法如下,亲测好用: 开机引导文件: / ...
- 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。
已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位 ...
- 考研数据结构之线性表(1.7)——练习题之A和B两个顺序表中相同元素组成一个新的从大到小的有序顺序表C的算法(C表示)
题目 设A和B是两个顺序表,其元素按递增的顺序排列.编写一个将A和B中相同元素组成一个新的从大到小的有序顺序表C的算法. 分析 在归并算法的基础上稍加改动,只需要将当前扫描到的相等元素归入C表即可. ...
- 【Android】iOS开发中xconfig和script脚本的使用
利用Xcode进行开发时需要进行很多build setting的设置以便能让项目按照设置的进行编译,同时有时候需要在编译时利用script脚本进行一些设置,本文主要介绍xconfig文件和script ...
- Android Studio安卓开发中使用json来作为网络数据传输格式
如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...
- Android直播软件开发中接入腾讯IM大概流程是怎样的
现阶段来看,直播软件中的即时通讯是非常重要的一个部分,毕竟直播过程中的交流和沟通是非常重要的,所以在Android直播软件开发时需要接入相关的IM服务. 通常我们选择的即时聊天服务,会选择集成简单方便 ...
最新文章
- 书评 | 圈内大佬怎么看编程日历
- dba用什么工具连接mysql_DBA必备的15款MySQL管理工具
- 从搭建脚手架到在npm上发布react组件
- HUE配置文件hue.ini 的database模块详解(包含qlite、mysql、 psql、和oracle)(图文详解)(分HA集群和非HA集群)...
- 副本的leader选举
- 20145308刘昊阳 《Java程序设计》实验五报告
- fpga如何约束走线_FPGA设计约束技巧之XDC约束之I/O篇 (上)
- 欣赏下国外人css3打造的载入动画
- linux iostat来对linux硬盘IO性能进行了解
- ​​​​iPhone 或 Mac 忘记登录密码,怎么快速找回
- objectArx ---反应器
- 计算机网络波动大,网络不稳定怎么办,小编教你电脑网络不稳定怎么办
- C# 根据身份证号码获取人员性别和出生年月
- Microsoft Visual Studio 2019介绍之使用入门
- 爪哇国新游记之五----继承与接口
- 按住Shift键右击鼠标打开命令行窗口
- android视频播放截图并制作成gif图片
- 如何有效实现软件的需求管理 - 8 (全文完)
- 033 Rust死灵书之重构Vec
- 「游戏」c++ 炸弹人2.0(新增人机)