`
zhangfy068
  • 浏览: 148551 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

请您先登录,才能继续操作

手势缩放字体大小

 
阅读更多

使用装饰者模式,讲一个普通的TextView 包装成一个可放大缩小的View

关于多点触控还是要进一步学习啊。。。

 

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

 

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

}

 

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)
		{
			// TODO Auto-generated catch block
			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");
	}
}

 

分享到:
评论

相关推荐

    android 文本字体大小的缩放

    在Android开发中,文本字体大小的缩放是一个常见的需求,特别是在设计阅读类或者老年人友好的应用时。本文将深入探讨如何实现这一功能,主要涉及以下几个关键知识点: 1. **字体大小的设置**:在Android中,我们...

    Android应用源码之多点缩放字体DEMO.zip

    这个DEMO项目展示了如何实现在Android应用中实现这一功能,让用户可以通过双指捏合手势来调整字体大小,提高用户体验。下面我们将深入探讨相关知识点。 1. **Android手势识别**: Android提供了GestureDetector类...

    Android多点缩放字体DEMO--.zip

    在Android开发中,多点缩放字体是一种常见的需求,尤其在设计用户友好的界面时,为了适应不同用户的需求,如视力不佳或者偏好大字体的用户。这个“Android多点缩放字体DEMO”是一个示例项目,它展示了如何在Android...

    Android应用源码之多点缩放字体DEMO .zip

    这个"Android应用源码之多点缩放字体DEMO"提供了一个实例,帮助开发者理解如何在Android应用中实现字体大小的动态调整。以下是基于这个DEMO的关键知识点的详细说明: 1. **AndroidManifest.xml**: 这是每个Android...

    安卓Android源码——多点缩放字体DEMO.zip

    在安卓(Android)开发中,多点缩放字体是一项重要的功能,它允许用户通过双击或者捏合手势来改变屏幕上的文本大小,提高可读性和用户体验。本DEMO是专门针对这一特性的一个实例代码,旨在帮助开发者理解并实现这一...

    应用源码之多点缩放字体DEMO.zip

    总之,这个DEMO提供了一个学习Android多点缩放字体的实例,涵盖了触摸事件处理、手势识别、视图矩阵变换以及布局管理等多个核心知识点,对于进行Android UI交互设计和代码学习的开发者来说具有很高的参考价值。...

    Android 多点缩放字体DEMO.zip

    【Android 多点缩放字体DEMO】是一个用于展示Android平台如何实现文本多点缩放功能的示例项目。在Android应用开发中,为用户提供良好的可读性和自定义体验是至关重要的,尤其是在处理不同屏幕尺寸和分辨率的设备时。...

    Android 多点缩放字体DEMO源码 .rar

    在Android开发中,多点...这个DEMO提供了学习和实践Android多点缩放字体的实例,对于理解Android手势检测和动态调整界面元素的大小具有很高的参考价值。开发者可以通过阅读源码,了解如何将这些概念应用于实际项目中。

    微信小程序canvas实现文字缩放

    在实际应用中,为了实现动态缩放,我们可能需要根据用户输入或手势事件来改变字体大小。例如,可以监听滑动事件,根据滑动的距离动态计算新的字体大小,然后重新绘制canvas: ```javascript let scaleFactor = 1.0 /...

    精典源码之多点缩放字体DEMO.zip

    【标题】"精典源码之多点缩放字体DEMO.zip" 提供的是一个Android...开发者可以通过阅读和调试这些代码,学习如何利用Android的MotionEvent类和GestureDetector类来处理多点触控,以及如何动态修改TextView的字体大小。

    Android应用源码之多点缩放字体DEMO-IT计算机-毕业设计.zip

    在Android应用开发中,多点缩放字体是一项重要的功能,特别是在阅读、文本编辑或自定义UI设计等场景中。这个“Android应用源码之多点缩放字体DEMO”是针对计算机专业毕业设计的一个示例项目,旨在帮助学生理解和实现...

    Android 多点缩放字体DEMO-IT计算机-毕业设计.zip

    在Android平台上,多点缩放字体技术是一种提升用户体验的重要特性,尤其在阅读、编辑或查看大量文本的应用场景中。这个“Android多点缩放字体DEMO”是一个专门为毕业设计学习而准备的应用源码示例,它可以帮助学生和...

    安卓开发-多点缩放字体DEMO .zip

    这个DEMO示例将展示如何实现在Android应用中实现字体的多点缩放功能,使得用户可以自由调整字体大小,适应不同的视觉需求和使用场景。 一、Android中的字体缩放基础 在Android系统中,可以通过`TextView`的`...

    安卓Android源码——精典源码之多点缩放字体DEMO.zip

    3. **缩放字体**:在Android中,可以通过改变TextView的textSize属性来调整字体大小。但在多点缩放场景下,通常需要自定义View或GestureDetector来处理缩放手势,并动态调整字体大小。 4. **GestureDetector**:...

    多点触控控制字体大小,源码中有详细注释_手势操作.zip

    在这个名为“多点触控控制字体大小,源码中有详细注释,简单Demo”的项目中,开发者提供了一个简单的应用实例,允许用户通过双指捏合的手势来调整文本的大小,这在阅读长篇文字或者查看复杂数据时尤其实用。...

    多点触控控制字体大小

    针对字体大小的调整,通常会使用缩放手势(Pinch Zoom),即两个手指同时接近或远离对方。为了识别这种手势,我们需要跟踪两个手指之间的距离变化。这可以通过计算两个手指之间的欧几里得距离实现: ```java float ...

    android 多点触控缩放字体DEMO

    在`ACTION_MOVE`事件中,更新这两个触点的新坐标,重新计算距离,与初始值相比得出缩放比例,从而调整`TextView`的字体大小。 为了平滑地改变字体大小,可以使用`ObjectAnimator`或`ValueAnimator`来创建动画效果。...

Global site tag (gtag.js) - Google Analytics