【Android】【完善】【凯子哥带你夯实应用层】滚来滚去,滚来滚去...Scroller相关类使用大揭秘!!!
2016-07-21 17:14
381 查看
完善【凯子哥带你夯实应用层】滚来滚去,滚来滚去…Scroller相关类使用大揭秘!!! 的JellyTextView
效果图
![](https://img-blog.csdn.net/20160721170032736)
凯子哥之所以会向y轴靠,正是因为这个方法中
未做任何判断直接调用这两个方法
mScrollerX.springback
mScrollerY.springback
在这个方法中有这样一个判断
很明显要么小于min,要么大于max,根本没有考虑其他情况保持原来的值
我改写后的
效果图
凯子哥之所以会向y轴靠,正是因为这个方法中
未做任何判断直接调用这两个方法
mScrollerX.springback
mScrollerY.springback
在这个方法中有这样一个判断
if (start < min) { startSpringback(start, min, 0); } else if (start > max) { startSpringback(start, max, 0); }
很明显要么小于min,要么大于max,根本没有考虑其他情况保持原来的值
public boolean springBack(int startX, int startY, int minX, int maxX, int minY, int maxY) { mMode = FLING_MODE; // Make sure both methods are called. final boolean spingbackX = mScrollerX.springback(startX, minX, maxX); final boolean spingbackY = mScrollerY.springback(startY, minY, maxY); return spingbackX || spingbackY; } boolean springback(int start, int min, int max) { mFinished = true; mStart = mFinal = start; mVelocity = 0; mStartTime = AnimationUtils.currentAnimationTimeMillis(); mDuration = 0; if (start < min) { startSpringback(start, min, 0); } else if (start > max) { startSpringback(start, max, 0); } return !mFinished; }
我改写后的
package com.socks.scrollerdemo; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.animation.BounceInterpolator; import android.widget.OverScroller; import android.widget.TextView; /** * Created by zhaokaiqiang on 15/2/28. */ public class JellyTextView extends TextView { private OverScroller mScroller; private float lastX; private float lastY; private float startX; private float startY; private int width; private int height; public JellyTextView(Context context, AttributeSet attrs) { super(context, attrs); mScroller = new OverScroller(context, new BounceInterpolator()); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); lastY = event.getRawY(); break; case MotionEvent.ACTION_MOVE: if (!mScroller.isFinished()) mScroller.forceFinished(true); float disX = event.getRawX() - lastX; float disY = event.getRawY() - lastY; offsetLeftAndRight((int) disX); offsetTopAndBottom((int) disY); lastX = event.getRawX(); lastY = event.getRawY(); break; case MotionEvent.ACTION_UP: // mScroller.startScroll((int) getX(), (int) getY(), -(int) (getX() - startX), // -(int) (getY() - startY)); // invalidate(); int minX = 0; int maxX = width - getWidth(); int minY = 0; int maxY = height - getHeight(); if (getX() <= 0 && getY() < 0) { } else if (getX() < 0) { if (getY() > height - getHeight()) { } else { minY = (int) getY() + 1; } } else if (getY() < 0) { minX = (int) getX() + 1; } if (getX() > width - getWidth() && getY() > height - getHeight()) { } else < 4000 span class="hljs-keyword">if (getX() > width - getWidth()) { if (getY() < 0) { minX= 0; } else { maxY = (int) getY() - 1; } } else if (getY() > height - getHeight()) { maxX = (int) getX() - 1; } mScroller.springBack((int) getX(), (int) getY(), minX, maxX, minY, maxY); invalidate(); break; } return super.onTouchEvent(event); } @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { setX(mScroller.getCurrX()); setY(mScroller.getCurrY()); invalidate(); } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); startX = getX(); startY = getY(); View v = (View) getParent(); width = v.getWidth(); height = v.getHeight(); } public void spingBack() { if (mScroller.springBack((int) getX(), (int) getY(), 100, 1000, 100, 1000)) { Log.d("TAG", "getX()=" + getX() + "__getY()=" + getY()); invalidate(); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories