android第二十三步拖拽与缩放


package com.example.dragscale;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class MainActivity extends Activity {

ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)this.findViewById(R.id.imageView);
imageView.setOnTouchListener(new TouchListener());
}
private final class TouchListener implements OnTouchListener{

private PointF startPoint = new PointF();
private Matrix matrix = new Matrix();
private Matrix cuuentMatrix = new Matrix();
private int mode= 0;
private static final int drag=1;
private static final int zoom=2;
private float startDis;
private PointF midPoint;
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch(arg1.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
mode=drag;
cuuentMatrix.set(imageView.getImageMatrix());
startPoint.set(arg1.getX(), arg1.getY());
break;
case MotionEvent.ACTION_MOVE:
if(mode == drag)
{
float dx=arg1.getX()-startPoint.x;
float dy=arg1.getY()-startPoint.y;
matrix.set(cuuentMatrix);
matrix.postTranslate(dx, dy);
}
else{
float endDis=distance(arg1);
if(startDis >10f){
float scale = endDis/startDis;
matrix.set(cuuentMatrix);
matrix.postScale(scale, scale, midPoint.x, midPoint.y);
}
}
break;
case MotionEvent.ACTION_UP:
mode= 0;
break;
case MotionEvent.ACTION_POINTER_UP:
mode= 0;
break;
case MotionEvent.ACTION_POINTER_DOWN:
mode=zoom;
startDis=distance(arg1);
if(startDis >10f){
midPoint = mid(arg1);
cuuentMatrix.set(imageView.getImageMatrix());
}
break;

}
imageView.setImageMatrix(matrix);
return true;
}
private float distance(MotionEvent arg1) {
float dx= arg1.getX(1)-arg1.getX(0);
float dy= arg1.getY(1)-arg1.getY(0);
return FloatMath.sqrt(dx*dx+dy*dy);
}
private PointF mid(MotionEvent arg1) {
float midx= (arg1.getX(1)+arg1.getX(0))/2;
float midy= (arg1.getY(1)+arg1.getY(0))/2;
return new PointF(midx,midy);
}

}

android第二十三步拖拽与缩放

时间: 2024-08-05 09:52:34

android第二十三步拖拽与缩放的相关文章

Android图片的拖拽与缩放

Android图片的拖拽与缩放 2014年5月9日 我们在使用应用当中经常需要浏览图片,比如在微信当中,点击图片之后可以对图片进行缩放. 本博客介绍如何对图片进行拖拽和缩放,这首先要了解Android中的触摸机制了,在屏幕中有手指按下.手指抬起.手指移动还有多个手指触摸的动作.我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理. 图片的拖拽主要是计算手指开始的位置与当前手指的位置关系,来进行平移的,具体可以看代码. 图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩

android ListView和GridView拖拽移位实现代码

关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:             首先说一下:拖拽ListView的item就不应该可以任意移动,只应该在ListView所在的范围内,而网易的你看看我都可以移动到状态栏了,虽然你做了处理,但是用户体验我个人感觉不好,在看看百度的,不仅控制了移动范围,更不错的百度的移动起来会时时的换位,看起来相当的形象,所以我认为这样相当的棒.说明一点

图片查看器(可拖拽,缩放,轮播)

一直都想写一个图片轮播,可是却一直都没有静下心来,今天终于有时间,就来做个图片查看器吧 功能:拖拽,缩放,还原,轮播,透明度 拖拽实现原理:鼠标按下onmousedown,鼠标移动onmousemove,鼠标松开onmouseup释放鼠标按下和移动的函数,一定是按下鼠标的同时进行移动,这里指的都是鼠标左键! 这里的难点就是清除默认事件,反正我是这样认为的,花了好几个小时才弄出来.写完之后发现,鼠标点一下再松开,图片就粘再指针上了,一直跟着指针跑,郁闷了好久,为什么会发生这种事,仔仔细细看了几十遍

android ListView和GridView拖拽移位具体实现及拓展

关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:              首先说一下:拖拽ListView的item就不应该可以任意移动,只应该在 ListView所在的范围内,而网易的你看看我都可以移动到状态栏了,虽然你做了处理,但是用户体验我个人感觉不好,在看看百度的,不仅控制了移动范 围,更不错的百度的移动起来会时时的换位,看起来相当的形象,所以我认为这样相当的棒.

Winform图片拖拽与缩放

最近做项目的时候遇到上传施工平面布置图,查看,因为图片比较大,一般的显示器分辨率无法显示全,然后还需要放大看清楚图片里面的文字内容,所以需要用到图片的拖拽与缩放功能.这里整理下具体操作. 首先新建一个窗体,拖一个panel控件到窗体中,然后在拖一个pictureobx控件到panel中,然后在添加个上传图片的按钮: 具体代码: using System; using System.Collections.Generic; using System.ComponentModel; using Sy

H5拖拽 构造拖拽及缩放 pdf展示

前言: 协助项目需要实现一个签名的功能. 功能说明:1.有文本签名和头像签名.2.头像签名需要实现可拖拽功能.3.需要展示的是pdf的文件并需要获取签名位于pdf文件的相对位置. 功能一:实现拖拽 思路:H5拖拽及构造函数实现拖拽及缩放 要点:1.需要设置拖拽元素属性 draggable="true" 2.可拖拽的元素设置ondragstart获取数据   3.对可放置拖拽元素的设置ondragover函数 默认地,无法将数据/元素放置到其他元素中.如果需要设置允许放置,我们必须阻止对

IOS开发UI篇—手势识别器(拖拽+旋转+缩放)

IOS开发UI篇—手势识别器(拖拽+旋转+缩放) 一.拖拽 示例代码: 1 // 2 // YYViewController.m 3 // 06-拖拽事件 4 // 5 // Created by apple on 14-6-19. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController ()

JS利用 Sea.js 实现模块化:拖拽、缩放及范围限制

知识点总结: Sea.js的使用:define.export.seajs.use.require等方法:   参考:http://seajs.org/docs/ Sea.js与require.js的区别: 鼠标事件及位置的使用:mousedown.mousemove.mouseup.ev.clientX.ev.clientY: 初始化模块.拖拽模块.缩放模块.范围限制模块的实现. 一.index页面 <!DOCTYPE html> <html lang="en">

js仿百度地图拖拽、缩放、添加图层功能(原创)

最近项目中完成的需求,仿百度地图中的功能: 要求:1.底层图可以拖拽.缩放.     2.拖拽一个图标,在底层图上对应位置添加一个标注点,该标注点位置要随底层图移动. 3.添加的标注点,可以拖动,删除. 主要知识点和难点就是各个浏览器的点击.拖拽.缩放事件兼容性,对js运动属性.运动偏移位置的了解,以及js面向对象的应用. 这里跟大家分享一下完成后的代码. html代码主要知识点就是运动元素和底层元素的相对绝对定位,css代码不再贴出: <div id="warp" style=