文档章节

类似美团悬浮框的效果

今日竹石
 今日竹石
发布于 2015/04/08 16:08
字数 467
阅读 435
收藏 6

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

具体代码:

ublic class MainActivity extends Activity implements OnScrollListener{

/**

* 自定义的MyScrollView

*/

private MyScrollView myScrollView;

/**

* 在MyScrollView里面的购买布局

*/

private LinearLayout mBuyLayout;

/**

* 位于顶部的购买布局

*/

private LinearLayout mTopBuyLayout;


@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main);

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

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

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

myScrollView.setOnScrollListener(this);

//当布局的状态或者控件的可见性发生改变回调的接口

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

@Override

public void onGlobalLayout() {

//这一步很重要,使得上面的购买布局和下面的购买布局重合

onScroll(myScrollView.getScrollY());

System.out.println(myScrollView.getScrollY());

}

});

}





@Override

public void onScroll(int scrollY) {

int mBuyLayout2ParentTop = Math.max(scrollY, mBuyLayout.getTop());

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

}




}

自定义的控件:

public class MyScrollView extends ScrollView {

private OnScrollListener onScrollListener;

public MyScrollView(Context context) {

this(context, null);

}

public MyScrollView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}


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

super(context, attrs, defStyle);

}

/**

* 设置滚动接口

* @param onScrollListener

*/

public void setOnScrollListener(OnScrollListener onScrollListener) {

this.onScrollListener = onScrollListener;

}


@Override

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

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

if(onScrollListener != null){

onScrollListener.onScroll(t);

}

}






/**

* 滚动的回调接口

* @author xiaanming

*

*/

public interface OnScrollListener{

/**

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

* @param scrollY

*

*/

public void onScroll(int scrollY);

}


}

activity的布局:

activity_main:

<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.meituandemo.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.meituandemo.MyScrollView>


</LinearLayout>

buy_layout布局:

<?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>


© 著作权归作者所有

今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
私信 提问
模仿美团点评的Android应用中价格和购买栏悬浮固定的效果

模仿美团点评的Android应用中价格和购买栏悬浮固定的效果

放纵的青春
2016/05/30
44
0
Android 下拉刷新、上拉加载库--BGARefreshLayout

BGARefreshLayout包含多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位 。 效果图: 目前已经实现了四种下拉刷新效果: 新浪微博下拉刷新风格(可设置各种状态是的文本,可设置整个刷...

bingoogolapple
2016/06/22
2.6K
0
app 菜单筛选控件 - WMZDropDownMenu

一个能几乎实现所有App各种类型筛选菜单的控件,可悬浮,目前已实现闲鱼/美团/Boss直聘/京东/饿了么/淘宝/拼多多/赶集网/美图外卖等等的筛选菜单,可以自由调用代理实现自己想组装的筛选功能和U...

wmz1
12/02
177
0
Android酷炫动画效果

Android自定义View:一个精致的打钩小动画 一个精致的打钩动画。 Android 自定义水平进度条圆角进度 项目中实现进度条进度过程中显示圆角样式 ViewPager系列之 仿魅族应用的广告BannerView ...

掘金官方
2017/12/19
0
0
steve/HoveringScroll

##滑动到顶部悬浮功能条 上滑停靠顶端悬浮框,下滑恢复原有位置 滑动时,监听的滚动Y值和悬浮区域以上的高度进行比较计算,对两个控件(布局)的显示隐藏来实现控件的顶部悬浮,通过和来实现。 ...

steve
2015/07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

类比思想歪解Java线程

在操作系统的概念里,有内核态,用户态。其实,操作系统的最小执行单位是进程,而进程是分类型的,有两种类型,内核进程,用户进程。 内核进程由操作系统启动时创建,用户进程是由用户程序启...

萧默
51分钟前
2
0
Git推送错误“ [[远程拒绝]主机->主机(分支当前已签出)”)

昨天,我发布了一个有关如何将Git存储库从我的一台计算机克隆到另一台计算机的问题 , 如何从另一台计算机“ git clone”? 。 现在,我可以成功地将Git存储库从源(192.168.1.2)克隆到目标...

javail
今天
4
0
Selenium 4.0 Alpha更新日志

早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新。 Selenium 4.0 Alpha版...

八音弦
今天
7
0
2、编写程序求Sn=a+aa+aaa+…+aa…aa的值,其中a是1—9之间的一位数字,n表示 a的位数

//编写程序求Sn=a+aa+aaa+…+aa…aa的值,其中a是1-9之间的一位数字, //n表示 a的位数 #include<stdio.h> int main() { int a,n,i,Sn=0,Z=0; printf("please intput a:\n"); scanf("%d",&a......

201905021729吴建森
今天
5
0
Git中的HEAD是什么?

您会看到Git文档说出类似 分支必须在HEAD中完全合并。 但是到底什么是Git HEAD ? #1楼 了解正确答案的一种好方法是运行git reflog HEAD ,您可以获得HEAD所指向的所有位置的历史记录。 #2楼...

技术盛宴
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部