android 两点缩放字体

android 两点缩放字体

 

MultiTouchTestActivity

 

package src.youer.text;

import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MultiTouchTestActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		TextView textView = (TextView) this.findViewById(R.id.text_view);
		try
		{
			textView.setText(readText());
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		float zoomScale = 0.5f;// 缩放比例
		new ZoomTextView(textView, zoomScale);
	}

	/**
	 * 读取txt
	 * 
	 * @param str
	 * @return
	 * @throws Exception
	 */
	public String readText() throws Exception
	{
		InputStream is = this.getClass()
				.getResourceAsStream("/assets/text.txt");
		int index = is.available();
		byte data[] = new byte[index];
		is.read(data);
		return new String(data, "UTF-8");
	}
}


 

ZoomTextView

package src.youer.text;

import android.widget.TextView;

public class ZoomTextView extends ZoomView<TextView>
{
	/** 最小字体 */
	public static final float MIN_TEXT_SIZE = 10f;

	/** 最大子图 */
	public static final float MAX_TEXT_SIZE = 100.0f;

	/** 缩放比例 */
	float scale;

	/** 设置字体大小 */
	float textSize;

	public ZoomTextView(TextView view, float scale)
	{
		super(view);
		this.scale = scale;
		textSize = view.getTextSize();
	}

	/**
	 * 放大
	 */
	protected void zoomOut()
	{
		textSize += scale;
		if (textSize > MAX_TEXT_SIZE)
		{
			textSize = MAX_TEXT_SIZE;
		}
		view.setTextSize(textSize);
	}

	/**
	 * 缩小
	 */
	protected void zoomIn()
	{
		textSize -= scale;
		if (textSize < MIN_TEXT_SIZE)
		{
			textSize = MIN_TEXT_SIZE;
		}
		view.setTextSize(textSize);
	}

}


 

ZoomView

package src.youer.text;

import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

/**
 * view缩放
 * 
 * @author Administrator
 * 
 * @param <V>
 */
public abstract class ZoomView<V extends View>
{

	protected V view;

	// -----------------------------------------------
	private static final int NONE = 0;// 空
	private static final int DRAG = 1;// 按下第一个点
	private static final int ZOOM = 2;// 按下第二个点

	/** 屏幕上点的数量 */
	private int mode = NONE;

	/** 记录按下第二个点距第一个点的距离 */
	float oldDist;

	public ZoomView(V view)
	{
		this.view = view;
		setTouchListener();
	}

	private void setTouchListener()
	{
		view.setOnTouchListener(new OnTouchListener()
		{
			@Override
			public boolean onTouch(View v, MotionEvent event)
			{
				switch (event.getAction() & MotionEvent.ACTION_MASK)
				{
				case MotionEvent.ACTION_DOWN:
					mode = DRAG;
					break;
				case MotionEvent.ACTION_UP:
				case MotionEvent.ACTION_POINTER_UP:
					mode = NONE;
					break;
				case MotionEvent.ACTION_POINTER_DOWN:
					oldDist = spacing(event);
					if (oldDist > 10f)
					{
						mode = ZOOM;
					}
					break;
				case MotionEvent.ACTION_MOVE:
					if (mode == ZOOM)
					{
						// 正在移动的点距初始点的距离
						float newDist = spacing(event);

						if (newDist > oldDist)
						{
							zoomOut();
						}
						if (newDist < oldDist)
						{
							zoomIn();
						}

					}
					break;
				}
				return true;
			}

			/**
			 * 求出2个触点间的 距离
			 * 
			 * @param event
			 * @return
			 */
			private float spacing(MotionEvent event)
			{
				float x = event.getX(0) - event.getX(1);
				float y = event.getY(0) - event.getY(1);
				return FloatMath.sqrt(x * x + y * y);
			}
		});
	}

	protected abstract void zoomIn();

	protected abstract void zoomOut();
}


 

main.xml

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

</LinearLayout>


 

 

 

assets目录下 text.txt内容 可以自行修改

 

手势缩放文本DEMO(QQ:5267621)
[00:01.00]动力火车 - 你是我的眼
[00:05.00]作词:萧煌奇 作曲:萧煌奇
[00:09.00]
[00:10.00]
[00:14.47]
[00:15.47]如果我能看得见
[00:18.04]就能轻易的分辨白天黑夜
[00:22.85]就能准确的在人群中
[00:26.87]牵住你的手
[00:29.98]
[00:30.91]如果我能看得见
[00:33.70]就能驾车带你到处遨游
[00:38.67]就能惊喜的从背后
[00:41.76]给你一个拥抱
[00:44.99]
[00:45.86]如果我能看得见
[00:49.23]生命也许完全不同
[00:54.30]可能我想要的我喜欢的我爱的
[00:57.97]都不一样
[00:59.88]
[01:05.71]眼前的黑不是黑
[01:09.80]你说的白是什么白
[01:13.86]人们说的天空蓝
[01:17.47]是我记忆中那团白云背后的蓝天
[01:23.68]
[01:25.58]我望向你的脸
[01:28.70]却只能看见一片虚无
[01:32.76]是不是上帝在我眼前遮住了帘
[01:36.54]忘了掀开
[01:40.55]
[01:40.75]你是我的眼 带我领略四季的变换
[01:49.05]你是我的眼 带我穿越拥挤的人潮
[01:56.86]你是我的眼 带我阅读浩瀚的书海
[02:04.39]因为你是我的眼 让我看见
[02:10.70]这世界就在我眼前
[02:16.77]
[02:17.77]
[02:42.19]
[02:43.19]眼前的黑不是黑
[02:47.22]你说的白是什么白
[02:51.35]人们说的天空蓝
[02:55.15]是我记忆中那团白云背后的蓝天
[03:01.43]
[03:03.14]我望向你的脸
[03:06.41]却只能看见一片虚无
[03:10.74]是不是上帝在我眼前遮住了帘
[03:14.24]忘了掀开
[03:18.66]
[03:22.43]你是我的眼 带我领略四季的变换
[03:30.02]你是我的眼 带我穿越拥挤的人潮
[03:37.78]你是我的眼 带我阅读浩瀚的书海
[03:45.49]因为你是我的眼 让我看见
[03:51.86]这世界就在我眼前
[03:57.39]
[04:01.00]你是我的眼 带我领略四季的变换
[04:08.63]你是我的眼 带我穿越拥挤的人潮
[04:16.62]你是我的眼 带我阅读浩瀚的书海
[04:24.02]因为你是我的眼 让我看见
[04:30.34]这世界就在我眼前

 

DEMO下载地址:http://download.csdn.net/detail/tt5267621/3735545

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值