android 实现可以放大缩小的TextView
2013-07-14 18:38
411 查看
前言
我们在浏览网页时,网页的文本可以放大缩小,android两点手势,两点距离靠近时缩小,两点距离远离时候是放大。那么若果不用android的WebView控件,单纯的TextView能否做到放大缩小呢,其实也是可以的。只要响应和处理手势事件即可。
注:本文demo源码下载地址:http://download.csdn.net/detail/dxzysk/5752815
一、效果图
Sample制作的界面效果如下图所示:
界面不是很漂亮,大家按照需要修改一下
二、部分代码
1,抽象类ZoomView设置触摸手势事件接口
2,ZoomTextView实现具体的抽象类ZoomView中的触摸手势事件接口
3,MultiTouchTextActivity使用ZoomTextView对象设置接口
我们在浏览网页时,网页的文本可以放大缩小,android两点手势,两点距离靠近时缩小,两点距离远离时候是放大。那么若果不用android的WebView控件,单纯的TextView能否做到放大缩小呢,其实也是可以的。只要响应和处理手势事件即可。
注:本文demo源码下载地址:http://download.csdn.net/detail/dxzysk/5752815
一、效果图
Sample制作的界面效果如下图所示:
界面不是很漂亮,大家按照需要修改一下
二、部分代码
1,抽象类ZoomView设置触摸手势事件接口
package nishik.ncc.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() { 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(); }
2,ZoomTextView实现具体的抽象类ZoomView中的触摸手势事件接口
package nishik.ncc.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); } }
3,MultiTouchTextActivity使用ZoomTextView对象设置接口
package nishik.ncc.text; import java.io.InputStream; import android.app.Activity; import android.os.Bundle; import android.text.method.ScrollingMovementMethod; import android.widget.TextView; public class MultiTouchTextActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView) this.findViewById(R.id.text_view); //textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 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"); InputStream is = getAssets().open("text.txt"); int index = is.available(); byte data[] = new byte[index]; is.read(data); return new String(data, "UTF-8"); } }
相关文章推荐
- [Android]可缩放性ImageView(可以放大缩小)
- Android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android如果重写onDraw实现一个类似TextView可以显示表情和链接的控件(二)
- android两种方式中自己画一个圆,实现单点触控时拖动图片,跟着拖动点走,并且可以放大或缩小
- Android:TextView不获取焦点可以实现跑马灯的效果
- Android实现ImageView图片双击放大及缩小
- Android实现可以展开的TextView
- android ExpandableTextView 的实现,可以在listview中利用
- android 自定义imageview实现 图片放大缩小
- Android中TextView不获取焦点可以实现跑马灯的效果
- Android App中实现可以双击放大和缩小图片功能的实例
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android webview 实现放大缩小 隐藏控件问题
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果