Search code examples
javaandroidtextviewscrollviewzooming

How to Zoom a Text View in Scroll View?


I have seen a lots of code here which is helpful to zoom your textview but none of them work with my text because it is within scrollview. How can I get rid of this problem?

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; 
}
}

Solution

  • Use Polidea's zoomview, it works in a scrollview and has pinch zoom and double tap to zoom, one thing thought, I ended up disabling the pinch zoom and just using the double tap

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

    Put your TextView andany other Views you are using into a LinearLayout that lives on a ZoomView which lives on the ScrollView, e.g.:

    <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>