【问题标题】:zoom not working if I try to pinch within the textview如果我尝试在文本视图中捏合,缩放不起作用
【发布时间】:2018-01-04 22:05:20
【问题描述】:

我正在尝试实现缩放以缩放 TextView。如果我将内容宽度和高度保持为换行内容,即缩放和滚动工作正常,即当我在 TextView 之外进行缩放时,缩放和滚动工作正常,但如果在 TextView 内完成则不起作用。

我想在 TextView 中进行。即当宽度和高度设置为匹配父级时。

这是我的代码:

活动代码:

public class sukharta extends Activity {

TextView scaleGesture;
RelativeLayout relative;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sukharta);
    scaleGesture = (TextView) findViewById(R.id.article);
    scaleGesture.setText(R.string.twentyfive);
    relative = (RelativeLayout) findViewById(R.id.sv) ;

    // ******Set gesture on your TextView******
    relative.setOnTouchListener(new simpleOnScaleGestureListener(this));

}


public class simpleOnScaleGestureListener implements View.OnTouchListener,
        ScaleGestureDetector.OnScaleGestureListener {

    private ScaleGestureDetector relative;

    public simpleOnScaleGestureListener(Context context) {
        relative = new ScaleGestureDetector(context, this);
    }

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        // TODO Auto-generated method stub

        relative = detector;

        float size = scaleGesture.getTextSize();
        Log.d("TextSizeStart", String.valueOf(size));

        float factor = detector.getScaleFactor();
        Log.d("Factor", String.valueOf(factor));


        float product = size * factor;
        Log.d("TextSize", String.valueOf(product));
        scaleGesture.setTextSize(TypedValue.COMPLEX_UNIT_PX, product);

        size = scaleGesture.getTextSize();
        Log.d("TextSizeEnd", String.valueOf(size));
        return true;
    }

    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
        return true;
    }

    @Override
    public void onScaleEnd(ScaleGestureDetector detector) {

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        relative.onTouchEvent(event);
        return true;
    }
}
}

XML 代码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sv">

            <TextView
                android:id="@+id/article"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    </RelativeLayout>

</ScrollView>

【问题讨论】:

    标签: java android scrollview pinchzoom


    【解决方案1】:

    您需要修改您的手势,现在您的TextView 正在占用完整的可用空间。所以你必须在TextView上设置手势。

    public class sukharta extends Activity {
    
        TextView scaleGesture;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.content_main);
            scaleGesture = (TextView) findViewById(R.id.article);
            scaleGesture.setText("25");
            scaleGesture.setMovementMethod(new ScrollingMovementMethod());
    
            // ******Set gesture on your TextView******
            scaleGesture.setOnTouchListener(new simpleOnScaleGestureListener(this));
    
        }
    
    
        public class simpleOnScaleGestureListener implements View.OnTouchListener,
                ScaleGestureDetector.OnScaleGestureListener {
    
            private ScaleGestureDetector gestureScale;
    
            public simpleOnScaleGestureListener(Context context) {
                gestureScale = new ScaleGestureDetector(context, this);
            }
    
            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                // TODO Auto-generated method stub
    
                gestureScale = detector;
    
                float size = scaleGesture.getTextSize();
                Log.d("TextSizeStart", String.valueOf(size));
    
                float factor = detector.getScaleFactor();
                Log.d("Factor", String.valueOf(factor));
    
    
                float product = size * factor;
                Log.d("TextSize", String.valueOf(product));
                scaleGesture.setTextSize(TypedValue.COMPLEX_UNIT_PX, product);
    
                size = scaleGesture.getTextSize();
                Log.d("TextSizeEnd", String.valueOf(size));
                return true;
            }
    
            @Override
            public boolean onScaleBegin(ScaleGestureDetector detector) {
                return true;
            }
    
            @Override
            public void onScaleEnd(ScaleGestureDetector detector) {
    
            }
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                gestureScale.onTouchEvent(event);
                return true;
            }
        }
    
    }
    

    注意 - 小建议,以大写字母开头你的类名,尽量避免内部类并专注于单一职责类设计。

    【讨论】:

    • 感谢您的回复。这样做已经解决了查询,但现在滚动不起作用。 @Rahul
    • 感谢它对你有用,如果它对你有用,你可以接受答案
    • 你的意思是ScrollView吗。
    • 是的,scaleGesture.setMovementMethod(new ScrollingMovementMethod());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2016-10-05
    相关资源
    最近更新 更多