展会信息港展会大全

Android多点触控缩放字体
来源:互联网   发布日期:2016-01-14 11:25:35   浏览:1641次  

导读:MultiTouchTestActivity.javapackage src.youer.text;import java.io.InputStream;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MultiTouchTestA......

MultiTouchTestActivity.java

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

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

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内容,可以自行修改。

手势缩放文本例子

谁整夜不回 ah 又让谁心碎

如果没人陪着我醉

安慰只会更疲惫

寂寞层层包围早已乱了错与对

天亮之前会不会

有人把我的心捡回

谁整夜不回 ah 又让谁心碎

除非梦见化成灰

不先堕落怎么飞

梦里慢慢受罪不如永远都不睡

末日之后会不会

是唯一重生的绝美

那曾经相爱的泪水

融化了整个世界的虚伪

不要拿时间去追悔

你的拥抱是那么绝对

请告诉我什么是珍贵

眼前最平凡的一切

就算痛苦还要轮回

我也无所谓相爱的泪水

谁整夜不回 ah 又让谁心碎

除非梦见化成灰

不先堕落怎么飞

梦里慢慢受罪不如永远都不睡

末日之后会不会

是唯一重生的绝美

那曾经相爱的泪水

融化了整个世界的虚伪

不要拿时间去追悔

你的拥抱是那么绝对

请告诉我什么是珍贵

眼前最平凡的一切

就算痛苦还要轮回

我也无所谓相爱的泪水

那曾经相爱的泪水

融化了整个世界的虚伪

不要拿时间去追悔

你的拥抱是那么绝对

请告诉我什么是珍贵

眼前最平凡的一切

就算痛苦还要轮回

我也无所谓相爱的泪水

赞助本站

人工智能实验室

相关热词: 多点触控 缩放 字体

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港