Scroller 实现的弹性回弹的LinearLayout
由于公司业务发展,多app需求很少,被调到java后台开发接口三个月了,还要我继续做 java,最近有点想换工作,不得不重新看看基础知识了。
晚上看到了滑动的实现方式,平滑滑package com.example.alter.scrollers.scroller;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.Scroller; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by alter on 16/4/18.
*/
public class ScrollLinearLayout extends LinearLayout {
Logger logger = LoggerFactory.getLogger(ScrollLinearLayout.class);
private Scroller mScroller;
private GestureDetector gestureDerector;
public ScrollLinearLayout(Context context) {
super(context, null);
} public ScrollLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mScroller = new Scroller(context);
gestureDerector = new GestureDetector(context, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
} @Override
public void onShowPress(MotionEvent e) { } @Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
} @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
int disY = (int) ((distanceY-0.5)/);
beginScroll(,disY);
return false;
} @Override
public void onLongPress(MotionEvent e) { } @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
});
} private void beginScroll(int dx, int dy) {
mScroller.startScroll(mScroller.getFinalX(),mScroller.getFinalY(),dx,dy);
invalidate();
System.out.println("smoothScrollBy()---> " +
"mScroller.getFinalX()="+mScroller.getFinalX()+","+
"mScroller.getFinalY()="+mScroller.getFinalY());
} private void prepareScroll(int fx, int fy) {
int dx=fx-mScroller.getFinalX();
int dy=fy-mScroller.getFinalY();
beginScroll(dx,dy);
} @Override
public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){
case MotionEvent.ACTION_UP:
prepareScroll(,);
break;
default:
return gestureDerector.onTouchEvent(event);
}
return super.onTouchEvent(event);
} @Override
public void computeScroll() {
if (mScroller.computeScrollOffset())
{
logger.info("CurX" + mScroller.getCurrX() + "CurY" + mScroller.getCurrY()); scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
}
super.computeScroll();
}
}
只实现了垂直方向的回弹效果。
滑动时,调用手势监听器的滑动;
手指抬起,调用Scroller滑动到0,0位置,完成回弹效果。
Scroller 实现的弹性回弹的LinearLayout的更多相关文章
- Android Scroller简单用法
Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(conte ...
- Android -- Scroller
Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(conte ...
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
前言: 虽然本文标题的有点标题党的感觉,但无论如何,通过这篇文章的学习以及你自己的实践认知,写个简单的滑屏小 Demo还是just so so的. 友情提示: 在继续往下面读之前,希望您对以下知识点 ...
- android 使用Scroller实现缓慢移动
在Launcher中的Workspace中实现了左右屏幕切换效果,里面就用到了Scroller记录滑动轨迹,实现一种缓慢地向左或向右移动的效果,这里我对这种效果进行总结: 我们先看一个例子:点击按钮时 ...
- view之Scroller工具类和GestureDetector的简单用法
转载:http://ipjmc.iteye.com/blog/1615828 Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View ...
- 【Android】Scroller分析
mScroller.getCurrX() //获取mScroller当前水平滚动的位置 mScroller.getCurrY() //获取mScroller当前竖直滚动的位置 mScroller.ge ...
- [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法
转载:http://ipjmc.iteye.com/blog/1615828 Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View ...
- Scroller应用:ListView滑动删除
1.设计思路 在Scroller的应用--滑屏实现中使用Scroller实现滑屏效果,这里使用Scroller与ListView实现相似QQ滑动.然后点击删除功能.设计思路是Item使用Scrolle ...
- Android Scroller简单用法实例
Android里Scroller类是为了实现View平滑滚动的一个Helper 类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(cont ...
随机推荐
- php 基础复习(2)GD库
一,生成验证码: 1.生成一张图片: recource imagecreatetruecolor(int $width , int $height) 注意:提前输出图片的header信息,默认是黑色 ...
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) I
链接:http://codeforces.com/gym/101116 题意:选六个数,必须出现次数最多,且数字最小,如果出现7优先加入7 解法:排序,出现7优先加入7,最后再将6个数排序 #incl ...
- Codeforces Round #373 (Div. 2) A
Description Every summer Vitya comes to visit his grandmother in the countryside. This summer, he go ...
- Maven仓库的理解及配置
什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文 件,如log4j.jar,junit. ...
- SqlSever基础 detalength函数 字节的个数
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 【leetcode❤python】70. Climbing Stairs
#Method1:动态规划##当有n个台阶时,可供选择的走法可以分两类:###1,先跨一阶再跨完剩下n-1阶:###2,先跨2阶再跨完剩下n-2阶.###所以n阶的不同走法的数目是n-1阶和n-2阶的 ...
- UVA 1456 六 Cellular Network
Cellular Network Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit S ...
- __declspec关键字详细用法
__declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...
- nslookup基础用法
简单介绍 简单介绍如下: 实例:查询163.com域名信息 D:>nslookup Default Server: ns-px.online.sh.cn Address: 202.96.209. ...
- servlet&jsp高级:第一部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...