全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android仿京东金融首页头像效果

1.介绍

看下效果图,gif录的有些卡顿,在真机上运行效果很好。

2.实现

很有意思的一个效果,原理其实很简单,就是通过监听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());
 }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="#FFF">

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <RelativeLayout
 android:layout_width="match_parent"
 android:layout_height="50dp"
 android:background="#F2F4F7">

 ...

 </RelativeLayout>

 <com.yl.jdfinanceindex.ObservableScrollView
 android:id="@+id/scrollView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:overScrollMode="never"
 android:scrollbars="none">

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="80dp"
  android:background="#F2F4F7">

  ...

 </RelativeLayout>

 <View
  android:layout_width="match_parent"
  android:layout_height="1000dp" />

 </LinearLayout>

 </com.yl.jdfinanceindex.ObservableScrollView>

 </LinearLayout>

 <com.yl.jdfinanceindex.CircleImageView
 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" />

</FrameLayout>

原生的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);
 }
}

3.写在最后

欢迎同学们吐槽评论,如果你觉得本篇博客对你有用,那么就留个言或者顶一下吧(^-^)

完整的Demo下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android仿京东金融首页头像效果  # Android首页头像效果  # Android京东金融首页头像  # Android仿京东首页秒杀倒计时  # Android仿京东首页画轴效果  # Android仿京东首页轮播文字效果  # Android实现京东首页效果  # 对你  # 同学们  # 自定义  # 不支持  # 写在  # 机上  # 很有意思  # 留个  # 大家多多  # 如果你觉得  # 其实很简单  # 效果很好  # 标题栏  # 博客  # id  # findViewById  # initView  # setScrollViewListener  # getLayoutParams  # iv_portrait 


相关文章: 东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Swift中swift中的switch 语句  中山网站推广排名,中山信息港登录入口?  如何在建站之星绑定自定义域名?  如何在腾讯云服务器快速搭建个人网站?  宿州网站制作公司兴策,安徽省低保查询网站?  如何快速上传自定义模板至建站之星?  如何快速搭建自助建站会员专属系统?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何基于PHP生成高效IDC网络公司建站源码?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  ,如何利用word制作宣传手册?  如何快速使用云服务器搭建个人网站?  c# 在高并发场景下,委托和接口调用的性能对比  成都网站制作报价公司,成都工业用气开户费用?  如何在Tomcat中配置并部署网站项目?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何用y主机助手快速搭建网站?  建站之星如何一键生成手机站?  Swift中循环语句中的转移语句 break 和 continue  如何快速搭建支持数据库操作的智能建站平台?  制作旅游网站html,怎样注册旅游网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何通过老薛主机一键快速建站?  如何在IIS服务器上快速部署高效网站?  如何在阿里云高效完成企业建站全流程?  建站主机是否属于云主机类型?  建站之星如何优化SEO以实现高效排名?  建站OpenVZ教程与优化策略:配置指南与性能提升  佛山网站制作系统,佛山企业变更地址网上办理步骤?  制作网站的软件免费下载,免费制作app哪个平台好?  临沂网站制作企业,临沂第三中学官方网站?  建站VPS选购需注意哪些关键参数?  C#如何在一个XML文件中查找并替换文本内容  制作宣传网站的软件,小红书可以宣传网站吗?  Python如何创建带属性的XML节点  宝塔建站后网页无法访问如何解决?  长沙企业网站制作哪家好,长沙水业集团官方网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在阿里云服务器自主搭建网站?  网站制作话术技巧,网站推广做的好怎么话术?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在香港免费服务器上快速搭建网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站之星导航菜单设置与功能模块配置全攻略  已有域名如何免费搭建网站?  太原网站制作公司有哪些,网约车营运证查询官网?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  建站之星如何实现PC+手机+微信网站五合一建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。