如何放大滚动查看文本视图?(How to Zoom a Text View in Scroll Vi

2019-10-21 22:07发布

我已经看到了很多的代码在这里这有利于缩小你textview但没有人用我的文字工作,因为它是内scrollview 。 我怎样才能摆脱这个问题的?

import android.app.Activity;
import android.os.Bundle;
import android.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;


public class Introduce extends Activity implements OnTouchListener{

final static float STEP = 200;
TextView mtxtRatio1,mtxtRatio2,mtxtRatio3,mtxtRatio4;
float mRatio = 1.0f;
int mBaseDist;
float mBaseRatio;
float fontsize = 13;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.introduce);

  mtxtRatio1 = (TextView)findViewById(R.id.intro1);  
  mtxtRatio1.setTextSize(mRatio+13);  
} 

public boolean onTouchEvent(MotionEvent event) {
  if (event.getPointerCount() == 2) {
    int action = event.getAction();
    int pureaction = action & MotionEvent.ACTION_MASK;
    if (pureaction == MotionEvent.ACTION_POINTER_DOWN) {
      mBaseDist = getDistance(event);
      mBaseRatio = mRatio;
    } else {
      float delta = (getDistance(event) - mBaseDist) / STEP;
      float multi = (float)Math.pow(2, delta);
      mRatio = Math.min(1024.0f, Math.max(0.1f, mBaseRatio * multi));
      mtxtRatio1.setTextSize(mRatio+13);
    }
  }
  return true; 
}

int getDistance(MotionEvent event) {
  int dx = (int)(event.getX(0) - event.getX(1));
  int dy = (int)(event.getY(0) - event.getY(1));
  return (int)(Math.sqrt(dx * dx + dy * dy));
 }

public boolean onTouch(View v, MotionEvent event) {
  // TODO Auto-generated method stub
  return false; 
}
}

Answer 1:

使用Polidea的ZOOMVIEW,它工作在一个滚动视图,并具有双指缩放和双击放大,有一点想,我结束了禁用双指缩放,只是使用双击

https://github.com/Polidea/android-zoom-view

把你的TextView使用的是成住在一个ZOOMVIEW一个的LinearLayout其住在滚动型,如andany其他浏览次数:

<ScrollView 
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

         <com.polidea.ZoomView 
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                       android:id="@+id/myLinearLayout"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:orientation="vertical" >        
                </LinearLayout>

        </com.polidea.ZoomView>

</ScrollView>


Answer 2:

希望这会帮助别人。 这个答案是从这里和这里 。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = (TextView) findViewById(R.id.tv);

    tv.setText(getString(R.string.hello_world));


    scaleGestureDetector = new ScaleGestureDetector(this, new simpleOnScaleGestureListener());

    tv.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);
                    scaleGestureDetector.onTouchEvent(event);
                    break;

                case MotionEvent.ACTION_MOVE:
                    // Disallow ScrollView to intercept touch events.
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    scaleGestureDetector.onTouchEvent(event);
                    break;

                case MotionEvent.ACTION_UP:
                    // Allow ScrollView to intercept touch events.
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
                }

            }
            return true;
        }
    });

}

从答案这里有当即便手指静态文本被调整(屏幕上的两个手指)的问题。 我所做的是添加校验,以使textSize不进行任何更改瞬间。

private float safe;

public class simpleOnScaleGestureListener extends SimpleOnScaleGestureListener {

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        // TODO Auto-generated method stub
        float size = tv.getTextSize();
        Log.d("TextSizeStart", String.valueOf(size));

        //float factor = detector.getScaleFactor();
        float factor = Math.max(0.5f, Math.min(detector.getScaleFactor(), 2f));
        Log.d("Factor", String.valueOf(factor));


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

        safe = Math.abs(product - size);

        if(product <= 100 && product >= 20 && safe < 3){
            //tv.setText("factor= " +factor + "\n" +  "product = \n" + size + " * " + factor + " \n= " + product +"\n" + getString(R.string.hello_world));
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, product);
        }

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

你可以玩safe < 3至您所期望的价值。



Answer 3:

以下是在TextView中与实施双指缩放的方式/无滚动型

MainActivity.java

public class MainActivity extends AppCompatActivity{

    final static float STEP = 200;
    float mRatio = 1.0f;
    int mBaseDist;
    float mBaseRatio;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        textViewData = (TextView).findViewById(R.id.tvContributeData);
        textViewData.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            if (event.getPointerCount() == 2) {
                int action = event.getAction();
                int pureaction = action & MotionEvent.ACTION_MASK;
                if (pureaction == MotionEvent.ACTION_POINTER_DOWN) {
                    mBaseDist = getDistance(event);
                    mBaseRatio = mRatio;
                } else {
                    float delta = (getDistance(event) - mBaseDist) / STEP;
                    float multi = (float) Math.pow(2, delta);
                    mRatio = Math.min(1024.0f, Math.max(0.1f, mBaseRatio * multi));
                    textViewData.setTextSize(mRatio + 13);
                }
            }
            return true;
        });

        int getDistance(MotionEvent event) {
            int dx = (int) (event.getX(0) - event.getX(1));
            int dy = (int) (event.getY(0) - event.getY(1));
            return (int) (Math.sqrt(dx * dx + dy * dy));
        }
    }
}


文章来源: How to Zoom a Text View in Scroll View?