使用Pinchable zoom ViewGroup RelativeLayout,降低了textview android的质量

时间:2015-09-29 12:25:16

标签: java android android-layout pinchzoom

我正在使用相对布局并启用了捏缩放手势(代码在 ZoomableViewGroup.java 中提供)。当我捏它时,TextView中的质量会降低。项目的结构非常简单,它有一个MainActivity,其布局为 main_activity.xml ,下面提供了代码。

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<com.example.test.ZoomableViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/activity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello"/>
</com.example.test.ZoomableViewGroup>

ZoomableViewGroup.java

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.RelativeLayout;

public class ZoomableViewGroup extends RelativeLayout {


    private ScaleGestureDetector mScaleDetector;
    private float mScaleFactor = 1;

    public ZoomableViewGroup(Context context) {
        super(context);
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
    }

    public ZoomableViewGroup(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
    }

    public ZoomableViewGroup(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mScaleDetector.onTouchEvent(event);
        return true;
    }

    protected void dispatchDraw(Canvas canvas) {

        canvas.save(Canvas.MATRIX_SAVE_FLAG);
        canvas.scale(mScaleFactor, mScaleFactor);
        super.dispatchDraw(canvas);
        canvas.restore();
    }

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            mScaleFactor *= detector.getScaleFactor();
            // Apply limits to the zoom scale factor:
            invalidate();
            requestLayout();
            return true;
        }
    }
}

0 个答案:

没有答案