java - 如何在 ScrollView 中缩放 TextView ?

标签 java android textview scrollview zooming

我在这里看到了很多有助于缩放 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; 
}
}

最佳答案

以下是在有/没有ScrollViewTextView中实现双指缩放的方法

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

关于java - 如何在 ScrollView 中缩放 TextView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529870/

相关文章:

java - 如何在 JAX-RS 客户端获取直接异常堆栈跟踪

java - 为什么在我实现的插入排序中处理有序数组时,通用版比专用版慢4倍?

android - fragment后台任务访问资源经常返回illegalStateException

android - 作为业务需求,我必须让我的后台服务在我的 android 应用程序中始终运行

java - TextView 整数作为可绘制的 png

android - 如何从内容 ://mms. 中检索彩信的日期

android - 无法在 TableRow 中动态居中 TextView

java - 在java中使用正则表达式删除匹配的字符串

java - 无法将java客户端连接到elasticsearch服务器

android - Android 设备中的内存和存储