使用手势缩放文本

来源:互联网 发布:mysql 导出存储过程 编辑:程序博客网 时间:2024/06/05 08:08

思路:为呈现文本的组件注册setOnTouchListener监听,然后判断缩放来改变字体大小。

MainActivity:

package com.home.mutitouch;import java.io.InputStream;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);TextView textView = (TextView) this.findViewById(R.id.main_tv);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 com.home.mutitouch;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 = 80.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 com.home.mutitouch;import android.util.FloatMath;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;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() {@Overridepublic 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();}




 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鼻子不通流鼻涕打喷嚏怎么办 一岁半宝宝流鼻涕鼻塞怎么办 没有感昌流鼻涕怎么办 婴儿感冒咳嗽流鼻涕怎么办 小孩经常流鼻子怎么办 5岁宝宝流鼻涕怎么办 小孩鼻涕一直流怎么办 二岁宝宝流鼻涕怎么办 小婴儿有点鼻塞怎么办 宝宝流鼻涕总不好怎么办 孩子鼻炎睡不好怎么办 鼻炎清鼻涕不止怎么办 宝宝持续低烧流鼻涕怎么办 孩子鼻塞不通气怎么办 2月婴儿感冒怎么办 长期流黄鼻涕怎么办 孩子流清水鼻涕怎么办 小孩有点流鼻子怎么办 初生婴儿堵鼻子怎么办? 小孩反复发烧了怎么办 小孩突然发烧了怎么办 40天宝宝鼻塞怎么办 宝宝伤风鼻子不通怎么办 鼻子伤风不通气怎么办 宝宝伤风流鼻子怎么办 十个月婴儿上火怎么办 一个多月宝宝鼻子有鼻屎怎么办 三个月婴儿感冒发烧怎么办 小孩感冒发烧流鼻涕怎么办 小孩感冒发烧反反复复怎么办 宝宝反复发烧39怎么办 一岁婴儿流鼻涕怎么办 四岁宝宝发烧怎么办 小孩流清鼻涕怎么办? 5宝宝光流清鼻涕怎么办 孩子一直流鼻子怎么办 10岁天天流鼻涕怎么办 喉咙痛又痒咳嗽怎么办 60天宝宝流鼻涕怎么办 宝宝流鼻子严重怎么办 鼻炎鼻涕多鼻塞怎么办