ScrollView 中的可缩放 TextView [英] Zoomable TextView in ScrollView
问题描述
我想做一个 TextView
,它可以根据捏缩放来改变它的文本大小.TextView
位于 ScrollView
内.我有 TextView
在捏合时缩放,但只有当你几乎完美地水平移动手指时.如果捏缩放有垂直分量,则默认为滚动而不是缩放
I would like to make a TextView
that can change the size of it's text based on pinch zooming. The TextView
is inside a ScrollView
. I've got the TextView
to zoom when pinching BUT only when you move your fingers almost perfectly horizontally. If there is a vertical component to the pinch-zoom it defaults to scrolling instead of zooming
有没有办法在 ScrollView
上有超过 1 个指针时禁用滚动,然后在指针计数返回 1 或 0 时重新启用滚动?是创建 CustomScrollView
小部件的最佳方法还是有更简单的方法?
Is there a way to disable the scrolling of the ScrollView
when there is more than 1 pointer on it then re-enable scrolling when the pointer count returns to 1 or 0? Is the best way to create a CustomScrollView
widget or is there an easier way?
推荐答案
灵感来自这个答案 https://stackoverflow.com/a/14577399/2014236
scaleGD = new ScaleGestureDetector(this, new simpleOnScaleGestureListener());
mTextView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getPointerCount() == 1){
//stuff for 1 pointer
}else{ //when 2 pointers are present
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
scaleGD.onTouchEvent(event);
break;
case MotionEvent.ACTION_MOVE:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
scaleGD.onTouchEvent(event);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return true;
}
});
//later in the code
public class simpleOnScaleGestureListener extends SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
float size = codedText.getTextSize();
float factor = detector.getScaleFactor();
int increase = 0;
if(factor > 1.0f)
increase = 2;
else if(factor < 1.0f)
increase = -2;
size += increase;
codedText.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
plainText.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//remembering the favourable text size
Editor edit = sp.edit();
edit.putFloat("TXTSIZE", size);
edit.commit();
return true;
}
}
绝不是完美的,但对我来说已经足够好了 - 随时进行改进.
By no means perfect but does a good enough job for me - feel free to make improvements.
这篇关于ScrollView 中的可缩放 TextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!