android仿美团客户端购买框悬浮特效

实现步骤如下:

1,新建一个项目,新建一个MyScrollView继承自ScrollView

public class MyScrollView extends ScrollView {

private OnScrollListener onScrollListener;

public MyScrollView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public MyScrollView(Context context, AttributeSet attrs) {

this(context, attrs,0);

}

//监听滚动事件

@Override

protected void onScrollChanged(int l, int t, int oldl, int oldt) {

super.onScrollChanged(l, t, oldl, oldt);

if(onScrollListener != null){

onScrollListener.onScroll(t);  //将top传出去

}

}

/**

* 设置滚动接口

* @param onScrollListener

*/

public void setOnScrollListener(OnScrollListener onScrollListener) {

this.onScrollListener = onScrollListener;

}

/**

*

* 滚动的回调接口

*

*

*/

public interface OnScrollListener{

/**

* 回调方法, 返回MyScrollView滑动的Y方向距离

* @param scrollY

*                 、

*/

public void onScroll(int scrollY);

}

}

很简单的重写,就是添加了一个回调,在滚动时去更新y值.

2,再看activity_main.xml的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/parent_layout"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<ImageView

android:id="@+id/imageView1"

android:layout_width="match_parent"

android:layout_height="45dip"

android:scaleType="centerCrop"

android:src="@drawable/navigation_bar" />

<com.example.mymmmdemo.MyScrollView

android:id="@+id/scrollView"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<FrameLayout

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

<ImageView

android:id="@+id/iamge"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/pic"

android:scaleType="centerCrop" />

<include

android:id="@+id/buy"

layout="@layout/buy_layout" />

<ImageView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/one"

android:scaleType="centerCrop" />

<ImageView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/one"

android:scaleType="centerCrop" />

<ImageView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/one"

android:scaleType="centerCrop" />

</LinearLayout>

<include

android:id="@+id/top_buy_layout"

layout="@layout/buy_layout" />

</FrameLayout>

</com.example.mymmmdemo.MyScrollView>

其实它是这样子的:

让悬浮框出现了两次,后面来解释为什么要这么做

3,悬浮框的buy_layout.xml

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<ImageView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/buy" />

</LinearLayout>

4,打开MainActivity.java

public class MainActivity extends Activity implements OnScrollListener {

private MyScrollView mScrollView;

/**

* 在MyScrollView里面的购买布局

*/

private LinearLayout mBuyLayout;

/**

* 位于顶部的购买布局

*/

private LinearLayout mTopBuyLayout;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mScrollView=(MyScrollView) findViewById(R.id.scrollView);

mScrollView.setOnScrollListener(this);

mBuyLayout=(LinearLayout) findViewById(R.id.buy);

mTopBuyLayout=(LinearLayout) findViewById(R.id.top_buy_layout);

//监听子元素的状态  是否消失

findViewById(R.id.parent_layout).getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

onScroll(mScrollView.getScrollY());

}

});

}

@Override

public void onScroll(int scrollY) {  //第一次进入应用也会触发onScroll()方法

int mBuyLayout2ParentTop = Math.max(scrollY, mBuyLayout.getTop());//选取最大值

mTopBuyLayout.layout(0, mBuyLayout2ParentTop, mTopBuyLayout.getWidth(), mBuyLayout2ParentTop + mTopBuyLayout.getHeight());

}

//原理:设置两个购买栏 , 第一个购买栏放在最顶头,第二个放置在正常位置, 一进入应用,首先会触发onScroll()方法,在方法里面判断

//是否滑动到顶部,如果不是,则将顶头栏与正常栏重叠一起放置

//如果滑倒了顶部  ,则将顶部栏固定在原有位置

}

来自为知笔记(Wiz)

时间: 2024-10-24 11:57:21

android仿美团客户端购买框悬浮特效的相关文章

Android 仿美团网,大众点评购买框悬浮效果

如上图美团网,大众点评购买框悬浮效果,用户在向上滑动界面时,购买按钮始终在界面上,用户体验很好,很人性化.下面具体看看代码是怎么实现的: 主界面布局文件main.xml <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+

Android仿网易客户端实现抽屉式拖拉菜单界面

前面有写过一篇文章使用DrawerLayout实现Android仿网易客户端抽屉模式,昨天从群里看一哥们问抽屉式拖拉,从主界面的下方出现,而使用DrawerLayout实现的是覆盖掉主界面,今天我们就来实现一下主界面下方脱出菜单界面,先上图,方便观看 啊哦,图片好大,开始今天的实现 1.继承HorizontalScrollView,实现自定义控件 package com.sdufe.thea.guo.view; import com.nineoldandroids.view.ViewHelper

Android 仿美团网,大众点评购买框悬浮效果之修改版

我之前写了一篇关于美团网,大众点评的购买框效果的文章Android对ScrollView滚动监听,实现美团.大众点评的购买悬浮效果,我自己感觉效果并不是很好,如果快速滑动界面,显示悬浮框的时候会出现一卡的现象,有些朋友说有时候会出现两个布局的情况,特别是对ScrollView滚动的Y值得监听,我还使用了Handler来获取,还有朋友给我介绍了Scrolling Tricks这个东西,我下载试了下,确实美团网,大众点评的购买框用的是这种效果,但是Scrolling Tricks只能在API11以上

Android 仿美团网,大众点评购买框悬浮效果,仿美团详情页,可下拉放大图片,向上滚动图片,松手有动画

直接上代码注释都写到代码里面了: 自定义的ScrollView package mm.shandong.com.testmtxqcomplex.myui; import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /**  * Created by buyadong on 2016/7/29.  */ public class MyScrollView e

Android仿美团加载数据 小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先做好的图像,与gif图片原理类似,就像是在放电影一样.补间动画可以实现View组件的移动.放大.缩小以及渐变等效果. 今天我们主要来模仿一下美团中加载数据时小人奔跑动画的对话框效果,取个有趣的名字就是Running Man,奔跑吧,兄弟!话不多少,先上效果图,让各位大侠看看是不是你想要实现的效果,然

Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)

用过美团客户端的朋友都知道,美团的加载等待提示很有意思,是一种动画的形式展现给我们,下面我们就对这背后的原理进行了解,然后实现自己的等待动画效果. 首先我们准备两张图片: 这两张图片看起来一模一样啊?细心的朋友会发现唯一不同的就在脚部,OK,我们就利用这两张图片的轮换播放实现动画效果,下面看一下代码: 1.动画文件frame_meituan.xml: <?xml version="1.0" encoding="utf-8"?> <animation

android 仿网易新闻客户端源码都有

原文:android 仿网易新闻客户端源码都有 android 仿网易新闻服务端源码 源代码下载地址: http://www.zuidaima.com/share/1550463560944640.htm http://www.zuidaima.com/share/1550463561206784.htm android 仿网易新闻 客户端和服务端 源码都有 ,有些功能还未实现,因为文件有点大,所以分为2次上传  java源代码截图:

Android仿联系人列表分组悬浮列表,PinnedHeaderListView源码解析

github地址:https://github.com/JimiSmith/PinnedHeaderListView 关于实现类似联系人列表,组的头部总是悬浮在listview最顶部的效果,github上面有两个比较好的实现,分别是pinnedSectionListview和pinnedHeaderListView,之所以选择后者进行源码解析,是因为后者的源码比较简单,便于我们理解实现的精髓所在. 如果你想直接实现Android仿联系人列表分组悬浮列表, 自定义PinnedHeaderListV

Android应用之——仿美团loading加载中动画

前言 想必用过美团客户端的用户对美团那个加载小人的动画印象很深刻,一个可爱的小人在那拼命的跑.这个动画实现的方法其实很多,今天这里就用frame动画来实现一下. 一.效果图 二.布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_w