- 浏览: 3905360 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hinuliba:
...
字体背景颜色的高度修改 -
KANGOD:
最后的 -createDialog() 私有方法是怎么回事,没 ...
简单的实现listView中item多个控件以及点击事件 -
sswangqiao:
呵呵,呵呵
onActivityResult传值的使用 -
yumeiqiao:
感觉你所的不清楚 lstView.setOnTouchLi ...
listview中viewflipper的问题 -
lizhou828:
果然是大神啊!!!
Animation动画效果的实现
androidi的多点触摸其实还有不少的缺陷 我在测试中只能用两点不知道是我写的不对 还是 本身就有错误
其实单点和多点没啥却别关键就在
MotionEvent.ACTION_POINTER_UP:
MotionEvent.ACTION_POINTER_DOWN:
这些点上的实现
public class Touch extends Activity implements OnTouchListener {
private static final String TAG = "Touch";
// These matrices will be used to move and zoom image
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
// We can be in one of these 3 states
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView);
view.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
// Dump touch event to log
dumpEvent(event);
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
Log.d(TAG, "mode=DRAG");
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
Log.d(TAG, "oldDist=" + oldDist);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
Log.d(TAG, "mode=ZOOM");
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
Log.d(TAG, "mode=NONE");
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x,
event.getY() - start.y);
}
else if (mode == ZOOM) {
float newDist = spacing(event);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
/** Show an event in the LogCat view, for debugging */
private void dumpEvent(MotionEvent event) {
String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",
"POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
StringBuilder sb = new StringBuilder();
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
sb.append("event ACTION_").append(names[actionCode]);
if (actionCode == MotionEvent.ACTION_POINTER_DOWN
|| actionCode == MotionEvent.ACTION_POINTER_UP) {
sb.append("(pid ").append(
action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
sb.append(")");
}
sb.append("[");
for (int i = 0; i < event.getPointerCount(); i++) {
sb.append("#").append(i);
sb.append("(pid ").append(event.getPointerId(i));
sb.append(")=").append((int) event.getX(i));
sb.append(",").append((int) event.getY(i));
if (i + 1 < event.getPointerCount())
sb.append(";");
}
sb.append("]");
Log.d(TAG, sb.toString());
}
/** Determine the space between the first two fingers */
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);
}
/** Calculate the mid point of the first two fingers */
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
}
- Touchv1.rar (142.8 KB)
- 下载次数: 324
发表评论
-
URI 转path
2019-06-26 10:41 1230转自知乎Matisse package com.zhihu ... -
权限申请
2017-09-22 13:25 1228public class PermissionActivit ... -
onPreviewFrame 相机输出格式转换yuv420p保存成图片
2015-11-25 15:59 7489在最近项目中,因为特殊需要,底层相机往外输出了i420 也 ... -
new Android's Runtime Permission
2015-11-03 21:05 1196targetSdkVersion 23 开始 使用运行时权 ... -
自定义listview 边缘效果
2015-02-28 10:58 1704static void ChangeEdgeEffect( ... -
发射打开wifi
2015-01-07 10:25 1377WifiManager wifiManager = (Wif ... -
RecyclerView
2014-11-05 13:08 1218http://www.grokkingandroid.com ... -
获取点击区域
2014-04-28 09:39 1523@Override public void getHitR ... -
speex 和libogg 编译
2014-04-03 16:17 6371下载: http://www.speex.org/down ... -
rsync 同步
2014-03-28 17:06 1805两台android 设备 进行rsy ... -
流转字符串
2014-03-11 09:49 1479public static String convertSt ... -
java simplexml 序列化
2014-03-06 13:22 5887<?xml version="1.0&quo ... -
获取其他程序的特定资源
2014-03-05 09:33 1660try { PackageManager man ... -
检测来电属于哪个sim卡
2014-02-07 10:41 1678public class IncomingCallInter ... -
使用 NDK r9 编译ffmpeg
2014-01-16 13:32 167701. 环境 ubuntu 我的是13.10 ndk r9 ... -
android h264含so
2014-01-13 11:24 1511http://download.csdn.net/downlo ... -
xml转义字符
2013-12-18 09:29 1561" " ' & ... -
字体背景颜色的高度修改
2013-12-11 10:31 4149当使用android:lineSpacingExtra= ... -
屏保的实现
2013-12-07 10:27 2731最近需要做一个屏保,开始以为很简单,因为系统本身就带了屏保功 ... -
PreferenceActivity下嵌套PreferenceScreen在其它布局中
2013-11-21 16:32 9103今天在修改系统代码的时候,系统代码用了PreferenceA ...
相关推荐
这是一个Android 多点触摸的实例源码
NULL 博文链接:https://lynen.iteye.com/blog/1117108
单点触摸实例:父节点中的某个子节点随手指移动; 多点触摸实例:缩放功能的实现。 参考《Cocos2D-X权威指南》一书。
安卓Android源码——多点触控实例源码.zip
WPF多点触控程序,图片、自定义控件等 内含本人部分效果源码,可做参考
采用先进的ARM Cortex A9处理器Hi3716H支持各种格式的高清晰度视频解码,提供音频/视频输入接口,3D加速引擎和标准的OpenGL ES 接口,Android2.0以上版本都是支持多点触摸的。因此本文提出了基于Android平台的多点...
Windows7的关于多点触摸到例子,Windows Touch 笔势、Windows Touch 操作示例 (MTManipulation)、Windows Touch 便笺簿示例 (MTScratchpadWMTouch)实例
主要介绍了Android编程开发之多点触摸(Multitouch)实现方法,结合实例形式详细分析了Android多点触摸的相关实现步骤与操作技巧,需要的朋友可以参考下
FreeformGestureDetector:raised_hand:适用于Android的多点触摸变换手势检测器。 样本样本回购示例用法FreeformGestureDetector类的行为类似于常规手势检测器。 它接收流FreeformGestureDetector:raised_hand:...
WPF写的简单多点触控程序 编译此程序后,可实现对黑色矩形框的多点触控操作。 软件环境:WIN7 , VS2010.net Framework 4 打开WPF以后,MainWindow.xaml程序更换为以下代码.
图片的拖拉功能是处理图片进一个有用且常用的功能,由于手机屏幕尺寸的限制,往往无法在手机上一次性的显示一张比较大的图片,也就是 ...或者获得更多的全貌信息,多点触摸与绽放功能正是满足这种应用场景的技术。
里面有多个触摸实例,单点触摸、多点触摸、图片拉伸、透明处理等。 利用Air for AS 编程技术,唉,要学的下载看看吧。
触摸分为单点触摸和多点触摸,先来看单点触摸,就是接收一个点的触摸。代码将实现过程清楚的写了下来,仔细分析代码吧。 bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init());...
图片的拖拉功能是处理图片进一个有用且常用的功能,由于手机屏幕尺寸的限制,往往无法在手机上一次性的显示一张比较大的图片,也就是 ...或者获得更多的全貌信息,多点触摸与绽放功能正是满足这种应用场景的技术。
wpf触摸实例,多点触控,滑动 边缘检测,等内容
MT4j是不错的java开源多点触摸框架(Multitouch For Java),可以实现非常华丽的多点触摸特效。但目前能从网上找到的中文教程资料很少,特此撰文一篇。
本文就主要通过一个实例具体讲解多点触控程序的实现。 首先来了解一下Android中多点触控的原理。 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC、Motorola和Samsung等知名厂商只要...
它能处理红外线的tracking blobs,并向你的程序发送多点触摸事件,如手指按下、手指移动和手指释放等。它包含一个配置程序和少量让你入门的实例,能和大部分类型的网络摄像头、视频捕捉设备交互。它目前只运行于...
它能处理红外线的tracking blobs,并向你的程序发送多点触摸事件,如手指按下、手指移动和手指释放等。它包含一个配置程序和少量让你入门的实例,能和大部分类型的网络摄像头、视频捕捉设备交互。它目前只运行于...