ScrollView 中的可缩放 TextView [英] Zoomable TextView in ScrollView

查看:53
本文介绍了ScrollView 中的可缩放 TextView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做一个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆