/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.scrolltricks;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.TextView;
public class QuickReturnFragment extends Fragment implements ObservableScrollView.Callbacks {
private static final int STATE_ONSCREEN = 0;
private static final int STATE_OFFSCREEN = 1;
private static final int STATE_RETURNING = 2;
private TextView mQuickReturnView;
private View mPlaceholderView;
private ObservableScrollView mObservableScrollView;
private ScrollSettleHandler mScrollSettleHandler = new ScrollSettleHandler();
private int mMinRawY = 0;
private int mState = STATE_ONSCREEN;
private int mQuickReturnHeight;
private int mMaxScrollY;
public QuickReturnFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.fragment_content, container, false);
mObservableScrollView = (ObservableScrollView) rootView.findViewById(R.id.scroll_view);
mObservableScrollView.setCallbacks(this);
mQuickReturnView = (TextView) rootView.findViewById(R.id.sticky);
mQuickReturnView.setText(R.string.quick_return_item);
mPlaceholderView = rootView.findViewById(R.id.placeholder);
mObservableScrollView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
onScrollChanged(mObservableScrollView.getScrollY());
mMaxScrollY = mObservableScrollView.computeVerticalScrollRange()
- mObservableScrollView.getHeight();
mQuickReturnHeight = mQuickReturnView.getHeight();
}
});
return rootView;
}
@Override
public void onScrollChanged(int scrollY) {
scrollY = Math.min(mMaxScrollY, scrollY);
mScrollSettleHandler.onScroll(scrollY);
int rawY = mPlaceholderView.getTop() - scrollY;
int translationY = 0;
switch (mState) {
case STATE_OFFSCREEN:
if (rawY <= mMinRawY) {
mMinRawY = rawY;
} else {
mState = STATE_RETURNING;
}
translationY = rawY;
break;
case STATE_ONSCREEN:
if (rawY < -mQuickReturnHeight) {
mState = STATE_OFFSCREEN;
mMinRawY = rawY;
}
translationY = rawY;
break;
case STATE_RETURNING:
translationY = (rawY - mMinRawY) - mQuickReturnHeight;
if (translationY > 0) {
translationY = 0;
mMinRawY = rawY - mQuickReturnHeight;
}
if (rawY > 0) {
mState = STATE_ONSCREEN;
translationY = rawY;
}
if (translationY < -mQuickReturnHeight) {
mState = STATE_OFFSCREEN;
mMinRawY = rawY;
}
break;
}
mQuickReturnView.animate().cancel();
mQuickReturnView.setTranslationY(translationY + scrollY);
}
@Override
public void onDownMotionEvent() {
mScrollSettleHandler.setSettleEnabled(false);
}
@Override
public void onUpOrCancelMotionEvent() {
mScrollSettleHandler.setSettleEnabled(true);
mScrollSettleHandler.onScroll(mObservableScrollView.getScrollY());
}
private class ScrollSettleHandler extends Handler {
private static final int SETTLE_DELAY_MILLIS = 100;
private int mSettledScrollY = Integer.MIN_VALUE;
private boolean mSettleEnabled;
public void onScroll(int scrollY) {
if (mSettledScrollY != scrollY) {
// Clear any pending messages and post delayed
removeMessages(0);
sendEmptyMessageDelayed(0, SETTLE_DELAY_MILLIS);
mSettledScrollY = scrollY;
}
}
public void setSettleEnabled(boolean settleEnabled) {
mSettleEnabled = settleEnabled;
}
@Override
public void handleMessage(Message msg) {
// Handle the scroll settling.
if (STATE_RETURNING == mState && mSettleEnabled) {
int mDestTranslationY;
if (mSettledScrollY - mQuickReturnView.getTranslationY() > mQuickReturnHeight / 2) {
mState = STATE_OFFSCREEN;
mDestTranslationY = Math.max(
mSettledScrollY - mQuickReturnHeight,
mPlaceholderView.getTop());
} else {
mDestTranslationY = mSettledScrollY;
}
mMinRawY = mPlaceholderView.getTop() - mQuickReturnHeight - mDestTranslationY;
mQuickReturnView.animate().translationY(mDestTranslationY);
}
mSettledScrollY = Integer.MIN_VALUE; // reset
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
ScrollTricks介绍
共23个文件
xml:9个
png:4个
java:4个
5星 · 超过95%的资源 需积分: 9 467 下载量 104 浏览量
2014-03-19
11:04:50
上传
评论 5
收藏 529KB ZIP 举报
温馨提示
ScrollTricks是一个开源控件,实现了两个简单功能: 1、Quick Return:向上滑动时,View也向上滑动并且消失,当向下滑动时,View马上出现。例如Google Now的搜索功能。 2、Sticky:类似的同步滚动,特定的View最多滑动到顶部并保持固定不动。例如大众点评或美团的“立即购买”功能。
资源推荐
资源详情
资源评论
收起资源包目录
scrolltricks.zip (23个子文件)
scrolltricks
res
drawable-hdpi
ic_launcher.png 4KB
.DS_Store 6KB
drawable-xhdpi
ic_launcher.png 6KB
drawable
.DS_Store 6KB
sticky_item_background.xml 945B
color
sticky_item_text.xml 763B
.DS_Store 12KB
drawable-xxhdpi
ic_launcher.png 11KB
values
colors.xml 739B
strings.xml 770B
styles.xml 2KB
dimens.xml 698B
drawable-mdpi
ic_launcher.png 3KB
layout
activity_main.xml 790B
fragment_content.xml 2KB
.DS_Store 6KB
src
com
example
android
scrolltricks
ObservableScrollView.java 2KB
StickyFragment.java 2KB
QuickReturnFragment.java 6KB
MainActivity.java 3KB
.gitignore 63B
AndroidManifest.xml 1KB
libs
android-support-v4.jar 543KB
共 23 条
- 1
xyz_lmn
- 粉丝: 1w+
- 资源: 53
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的节能断电保护电路设计
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的机床位移检测系统
- unity3D翻书插件
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的红外测控系统
- Date(1).cpp
- java基于ssm珠宝商城购物网站案例设计
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的灯光调光控制系统开发
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的超声测距系统的设计
- Visual Basic快速入门.md
- STM32单片机FPGA毕设电路原理论文报告一种基于单片机的半导体激光器电源控制系统的设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页