富途正在招聘各类岗位,详见链接
totond / booheeruler Goto Github PK
View Code? Open in Web Editor NEW仿写薄荷健康体重选择控件
License: MIT License
仿写薄荷健康体重选择控件
License: MIT License
富途正在招聘各类岗位,详见链接
代码中设置刻度颜色,没有效果。
数值刻度尺,默认是上面值大,下面值小。
希望可以添加一个属性用来设置数值大小的排列方向
locationX是从0开始的,为什么绘制出来却在屏幕中间呀。
or (int i = mMinScale; i <= mMaxScale; i++){
float locationX = (i - mMinScale) * mInterval;
if (i % 10 == 0) {
canvas.drawLine(locationX, 0, locationX, mBigScaleLength, mBigScalePaint);
canvas.drawText(String.valueOf(i/10), locationX, 4 * mSmallScaleLength , mTextPaint);
}else {
canvas.drawLine(locationX, 0, locationX, mSmallScaleLength, mSmallScalePaint);
}
}
有一些APP需要设置标尺的横向和纵向,另外 公英制 的尺度是不一样的,可以考虑加一下。个人建议,仅供参考。
希望能添加个两边虚化的功能
定义了这么多的属性
纵向尺子放在ScrollView里面无法滑动
请问 drawScale方法中if (locationX > getScrollX() - mDrawOffset && locationX < (getScrollX() + canvas.getWidth() + mDrawOffset))
判断什么的?
我是使用SmartTabLayout+ViewPager;ViewPager中的Fragment中使用BooheeRuler,会出现滑动不了的现象,请问这个能帮解决一下吗?
//把滑动偏移量scrollX转化为刻度Scale
private float scrollXtoScale(int scrollX) {
return ((float) (scrollX - mMinPosition) / mLength) * mMaxLength + mParent.getMinScale();
}
这个函数会产生 除0 情况。mLength可能为0
急急急!!和scorllView冲突!速度解决下!
应该是InnerRuler 这个类里面mOutLinePaint没有设置setAntiAlias(true),所以轮廓线没有画出来,建议加这个,或者添加一个属性可以设置轮廓线的宽度的,超过setStrokeWidth超过1的应该也能显示出来
我在看HorizontalScrollView的时候,看到onTouchEvent中MotionEvent.ACTION_UP,都会回收mVelocityTracker:
case MotionEvent.ACTION_UP:
//...
recycleVelocityTracker();
// ...
break;
你在 HorizontalRuler 的scrollBackToCurrentScale 和 fling 方法中调用了 invalidate()方法,为什么它的子类的ondraw()方法没有调用呢?
请问如果我想自定义最小单位该如何去做?例如我想让每个刻度最小单位为10,滑动一个刻度就是增加10或者减少10。并且考虑到多种应用场景,我想让显示的数字不带小数点,全部显示整数,这个该如何处理?最近项目用到大神的框架,希望能指点一下
你好。我在模仿薄荷卷尺的时候有一个问题:
调用Scroller.fling滑到最后一段距离有一个明显的减速过程,但是我发现你的和薄荷的都没有这样。
我的滑动处理的代码是下面这样的
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (!mFlingScroller.isFinished()) {
mFlingScroller.abortAnimation();
}
int index = event.getActionIndex();
mPointActivtyId = event.getPointerId(index);
mLastX = event.getX();
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
} else {
mVelocityTracker.clear();
}
mVelocityTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
mVelocityTracker.addMovement(event);
int pointIndex = event.findPointerIndex(mPointActivtyId);
if (pointIndex == -1) {
Log.i(TAG, "onTouchEvent: error index");
break;
}
float x = event.getX(pointIndex);
float dx = x - mLastX;
float scrollDx = -dx;
scrollBy((int) scrollDx, 0);
mLastX = x;
break;
case MotionEvent.ACTION_UP:
mVelocityTracker.computeCurrentVelocity(1000, mMaximumFling);
float xvel = VelocityTrackerCompat.getXVelocity(mVelocityTracker,
mPointActivtyId);
Log.i(TAG, "onTouchEvent: " + xvel);
if (Math.abs(xvel) > mMinimumFling) {
mFlingScroller.fling(
getScrollX(), getScrollY(),
-(int) xvel, 0,//数据设为计算出的速度的相反值
leftMaxScorll, rightMaxScroll,
0, 0);
invalidate();
} else {
ajustScrollX();
}
mPointActivtyId = -1;
mLastX = -1;
break;
case MotionEvent.ACTION_CANCEL:
mPointActivtyId = -1;
mLastX = -1;
mVelocityTracker.recycle();
break;
}
其实可以使用getScrollX() + width 来算出绘制光标或横线的位置。
刻度值如何设置从大到小或从小到大?
使用 java 代码设置 minScale 和 maxScale 以及 currentScale 时,返回的数值不对,而且莫名奇妙,,,
我在读你的代码时,感觉你对Fling结束时的处理方式很巧妙。恕我孤陋寡闻,是你自己想的还是有什么参考依据?
下面这段代码:
@Override
public void computeScroll() {
if (mOverScroller.computeScrollOffset()) {
scrollTo(mOverScroller.getCurrX(), mOverScroller.getCurrY());
// 用这种方式判断Fling结束时刻,我觉得挺巧妙的
if (!mOverScroller.computeScrollOffset() && mCurrentScale != Math.round(mCurrentScale)){
//Fling完进行一次检测回滚
scrollBackToCurrentScale();
}
invalidate();
}
}
您好,在浏览了您的代码之后,我发现一个可能存在的问题,如题:
如果说mCurrentScale 无限趋近其近似整数的时候,理论上将会一直循环执行scrollBackToCurrentScale()方法
例如 mCurrentScale = 10.991211……,mCurrentScale!=Math.round(mCurrentScale),这个不等式将永远会成立,我觉得是不是应该再加一个处理精度的方法,防止无限绘制下去。
如果刻度尺在被scrollview这样的布局包裹的情况下,滑动会有卡顿的感觉,建议在onTouchEvent里面加上处理,我这里重写处理后感觉非常流畅,建议您可以加上,这里是我的处理方式
public boolean onTouchEvent(MotionEvent event) {
ViewGroup parent = (ViewGroup) getParent();
float currentX = event.getX();
//开始速度检测
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
parent.requestDisallowInterceptTouchEvent(true);
if (!mOverScroller.isFinished()) {
mOverScroller.abortAnimation();
}
mLastX = currentX;
break;
case MotionEvent.ACTION_MOVE:
float moveX = mLastX - currentX;
mLastX = currentX;
scrollBy((int) (moveX), 0);
break;
case MotionEvent.ACTION_UP:
//处理松手后的Fling
mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
int velocityX = (int) mVelocityTracker.getXVelocity();
if (Math.abs(velocityX) > mMinimumVelocity) {
fling(-velocityX);
} else {
scrollBackToCurrentScale();
}
//VelocityTracker回收
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
releaseEdgeEffects();
parent.requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_CANCEL:
if (!mOverScroller.isFinished()) {
mOverScroller.abortAnimation();
}
//回滚到整点刻度
scrollBackToCurrentScale();
//VelocityTracker回收
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
releaseEdgeEffects();
parent.requestDisallowInterceptTouchEvent(false);
break;
}
return true;
}
主要就是加上requestDisallowInterceptTouchEvent解决垂直和水平的滑动冲突即可
最后非常感谢作者开源的这个控件,写的非常棒,结构清晰,可读性非常棒,帮了很大的忙,真的非常感谢!!
我使用过程中偶尔出现滑动过程中卡死现象,发现是这个方法被不停的调用,这个暂时还不清楚哪里出现了问题导致这个方法被无限次调用导致卡死
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.