- 浏览: 238820 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
maotou1988:
android基于netty的发送图片与文字demo,楼主共勉 ...
在android中使用netty框架通信 -
ZSRTFAT:
学习了,谢谢分享
android 基于surfaceview 的多点触控实现 -
charlotte:
学习了!!!!!
Java nio 客户端连接Server -
nilo:
您好, 本人菜鸟, 正在学习设计模式. 当我学习完简单工厂模式 ...
策略模式 -
fokman:
一江春水邀明月 写道缺少SocketInfoUtils Th ...
Java nio 客户端连接Server
hello,各位朋友。最近接到一个功能需要实现多点触控,也就是我们通常所看到的把手指放在屏幕上,可以放大和缩小图片的 操作。在google上查找了一些资料,发现很多都是使用imageView在实现的。但是在游戏的开发过程中,使用surfaceview效率会更高一些,所以就尝试使用surfaceview来实现。
看代码:
public class DisplayActivity extends Activity { private SurfaceView videoView; private SurfaceHolder sfh; private Canvas canvas; private Paint paint; private boolean flag = true; private int screenW, screenH; private Bitmap bmpIcon; //记录两个触屏点的坐标 private int x1, x2, y1, y2; //倍率 private float rate = 1; //记录上次的�?�? private float oldRate = 1; //记录第一次触屏时线段的长�? private float oldLineDistance; //判定是否头次多指触点屏幕 private boolean isFirst = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.media_play); videoView = (SurfaceView)findViewById(R.id.videoView); sfh = videoView.getHolder(); sfh.addCallback(new DisplaySurfaceView()); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); screenW = dm.widthPixels; screenH = (dm.heightPixels)/2; } class DisplaySurfaceView implements SurfaceHolder.Callback{ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder arg0) { new ImageThread().start(); } @Override public void surfaceDestroyed(SurfaceHolder arg0) { flag = false; } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { isFirst = true; oldRate = rate; } else { if (event.getPointerCount() > 1) { x1 = (int) event.getX(0); y1 = (int) event.getY(0); x2 = (int) event.getX(1); y2 = (int) event.getY(1); if (event.getPointerCount() == 2) { if (isFirst) { //得到第一次触屏时线段的长�? oldLineDistance = (float) Math.sqrt(Math.pow(event.getX(1) - event.getX(0), 2) + Math.pow(event.getY(1) - event.getY(0), 2)); isFirst = false; } else { //得到非第�?��触屏时线段的长度 float newLineDistance = (float) Math.sqrt(Math.pow(event.getX(1) - event.getX(0), 2) + Math.pow(event.getY(1) - event.getY(0), 2)); //获取本次的缩放比�? rate = oldRate * newLineDistance / oldLineDistance; } } } } return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } class ImageThread extends Thread{ @Override public void run() { while (flag) { long start = System.currentTimeMillis(); myDraw(); long end = System.currentTimeMillis(); try { if (end - start < 50) { Thread.sleep(50 - (end - start)); } } catch (InterruptedException e) { e.printStackTrace(); } } } } public void myDraw() { try { canvas = sfh.lockCanvas(); if (canvas != null) { canvas.drawColor(Color.BLACK); canvas.save(); //缩放画布(以图片中心点进行缩放,XY轴缩放比例相�? bmpIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.aa); canvas.scale(rate, rate, screenW / 2, screenH / 2); int width = screenW / 2 - bmpIcon.getWidth() / 2; int height = screenH / 2 - bmpIcon.getHeight() / 2; //绘制位图icon canvas.drawBitmap(bmpIcon, width, height, paint); canvas.restore(); //便于观察,这里绘制两个触点时形成的线�? // canvas.drawLine(x1, y1, x2, y2, paint); sfh.unlockCanvasAndPost(canvas); } } catch (Exception e) { e.printStackTrace(); } finally { } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } }
media_play.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/displayName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:text="321321321" android:textColor="#AA1122" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="400dp" > <SurfaceView android:id="@+id/videoView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:scaleType="matrix" /> </LinearLayout> <Button android:id="@+id/aaaBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="123321" /> </LinearLayout>这样就实现了多点触控,放大和缩小图片的效果了,aa这个图片是自己随便找的一个,可以根据实际情况修改。
发表评论
-
获得手机相关信息的实现方法
2015-04-04 00:55 774本文介绍了如何通过android提供的servi ... -
android判断当前sdk版本以及是否是平板
2013-11-19 13:53 1278最近做了一个项目中需要使用appWidget,但是 ... -
android 程序检查当前应用是否在运行
2012-11-09 17:05 1065最近做一个项目,需要知道当前的android 程序是 ... -
netty 找不到org.jboss.netty.bootstrap.ClientBootstrap解决
2012-09-25 14:20 4017今天碰到一个莫名其妙的问题,在做socket连接的时候发 ... -
Netty 之Oio程序编写
2012-09-24 14:06 4504今日将android里面使用的socket 方式改成 ... -
定义文本样式
2012-09-06 14:19 1061android程序中的按钮经常需要定义文字的大小,是否加粗,居 ... -
点击按钮显示不同的状态
2012-09-06 14:05 978android给我们提供的UI还比较丰富,但是基本上都 ... -
android 两个listView 共存的显示问题
2012-08-07 09:55 2486如果在一个layout里面需要定义有两个listvie ... -
定义带箭头的Button 样式
2012-08-02 10:58 11152定义一个圆角的Button 样式 <style ... -
android UI入门三 自定义背景样式
2012-08-01 15:23 1369在android 开发应用中,大部份的开发人员 ... -
android UI入门二 定义图片横竖屏切换正确显示
2012-07-30 13:20 3206android开发的时候通常会使用到横竖屏切换,但是 ... -
android UI入门一
2012-07-24 12:20 913在ios系统中,常常看到绚丽的画面让人心动不已。然而在 ... -
android spinner 实现国码选择
2012-07-13 15:33 3925android 中得Spinner相当于是一个下拉框 ... -
在自己的android应用中调用打电话实现
2012-07-13 15:10 1049最近在做一个项目,需要在自己写的应用中调用打电话给别人 ... -
android 定义圆角Button
2012-06-30 15:31 5028定义styles.xml <?xml version= ... -
android 自定义导航控件
2012-06-26 15:19 7825在编写android应用程序的过程中,经常会使用到导航 ... -
android observer 处理handler消息
2012-06-12 09:41 2048在开发android网络应用程序,通常都会使用han ... -
android wifi 处理
2012-06-12 09:35 3183在android应用程序中可以很方便的使用wifi来处理不同的 ... -
android canvas 使用
2012-04-06 09:38 7629Canvas 又称为画布,在游戏开发过程中是一个经常使用的类。 ... -
给android imageView(图片) 添加超链接
2012-03-29 09:29 8048hi ,各位好朋友,最近忙于开发没有时间更新博客。 有很多朋 ...
相关推荐
surfaceview 多点触控移动放大缩小.rar
import android.view.SurfaceView; import android.view.Window; import android.widget.ImageView; public class MyMultitouchDemo extends Activity { private static final int SCALEBASIC = 3 ;// 调整的比率 ...
一、概述 现在app中,图片预览功能肯定是少不了的,用户基本已经...想要做到图片支持多点触控,自由的进行缩放、平移,需要了解几个知识点:Matrix , GestureDetector , ScaleGestureDetector 以及事件分发机制,ps:不
7.20 多点触控屏幕事件捕捉 479 7.21 电流急急棒 481 7.22 自定义动画按钮事件 486 7.23 设置录音取样频率与显示录音时间 490 7.24 exif照片信息编辑及读取 495 7.25 声音音效均衡器、重低音与音场...
7.20 多点触控屏幕事件捕捉 7.21 电流急急棒 7.22 自定义动画按钮事件 7.23 设置录音取样频率与显示录音时间 7.24 EXIF照片信息编辑及读取 7.25 声音音效均衡器、重低音与音场控制 7.26 在自定义的SurfaceView上绘制...
7.20 多点触控屏幕事件捕捉 7.21 电流急急棒 7.22 自定义动画按钮事件 7.23 设置录音取样频率与显示录音时间 7.24 EXIF照片信息编辑及读取 7.25 声音音效均衡器、重低音与音场控制 7.26 在...
7.20 多点触控屏幕事件捕捉 7.21 电流急急棒 7.22 自定义动画按钮事件 7.23 设置录音取样频率与显示录音时间 7.24 EXIF照片信息编辑及读取 7.25 声音音效均衡器、重低音与音场控制 7.26 在自定义的SurfaceView上绘制...
7.20 多点触控屏幕事件捕捉 7.21 电流急急棒 7.22 自定义动画按钮事件 7.23 设置录音取样频率与显示录音时间 7.24 EXIF照片信息编辑及读取 7.25 声音音效均衡器、重低音与音场控制 7.26 在自定义的SurfaceView上绘制...
7.20 多点触控屏幕事件捕捉 7.21 电流急急棒 7.22 自定义动画按钮事件 7.23 设置录音取样频率与显示录音时间 7.24 EXIF照片信息编辑及读取 7.25 声音音效均衡器、重低音与音场控制 7.26 在自定义的SurfaceView上绘制...
19.2 多点触控 537 19.2.1 案例效果与基本原理 537 19.2.2 开发步骤 538 19.3 多键监听 541 19.3.1 案例效果与基本原理 541 19.3.2 开发步骤 542 19.4 本章小结 544 第20章 bn赛艇 545...