Android 移动缩放的ImageView
2013-10-09 13:00
197 查看
今天介绍一下Android中怎么实现ImageView的缩放和移动,自定义TouchImageView。
public class TouchImageView extends
ImageView {
Matrix 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 last
= new PointF();
PointF start
= new PointF();
float
minScale = 1f;
float
maxScale = 3f;
float[]
m;
int
viewWidth, viewHeight;
static final
int CLICK = 3;
float
saveScale = 1f;
protected
float origWidth, origHeight;
int
oldMeasuredWidth, oldMeasuredHeight;
ScaleGestureDetector mScaleDetector;
Context context;
public TouchImageView(Context context)
{
super(context);
sharedConstructing(context);
}
public TouchImageView(Context context,
AttributeSet attrs) {
super(context, attrs);
sharedConstructing(context);
}
private void
sharedConstructing(Context context) {
super.setClickable(true);
this.context = context;
mScaleDetector = new ScaleGestureDetector(context, new
ScaleListener());
matrix = new Matrix();
m = new float[9];
setImageMatrix(matrix);
setScaleType(ScaleType.MATRIX);
setOnTouchListener(new
OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleDetector.onTouchEvent(event);
PointF curr = new PointF(event.getX(), event.getY());
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
last.set(curr);
start.set(last);
mode = DRAG;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
float deltaX = curr.x - last.x;
float deltaY = curr.y - last.y;
public class TouchImageView extends
ImageView {
Matrix 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 last
= new PointF();
PointF start
= new PointF();
float
minScale = 1f;
float
maxScale = 3f;
float[]
m;
int
viewWidth, viewHeight;
static final
int CLICK = 3;
float
saveScale = 1f;
protected
float origWidth, origHeight;
int
oldMeasuredWidth, oldMeasuredHeight;
ScaleGestureDetector mScaleDetector;
Context context;
public TouchImageView(Context context)
{
super(context);
sharedConstructing(context);
}
public TouchImageView(Context context,
AttributeSet attrs) {
super(context, attrs);
sharedConstructing(context);
}
private void
sharedConstructing(Context context) {
super.setClickable(true);
this.context = context;
mScaleDetector = new ScaleGestureDetector(context, new
ScaleListener());
matrix = new Matrix();
m = new float[9];
setImageMatrix(matrix);
setScaleType(ScaleType.MATRIX);
setOnTouchListener(new
OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleDetector.onTouchEvent(event);
PointF curr = new PointF(event.getX(), event.getY());
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
last.set(curr);
start.set(last);
mode = DRAG;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
float deltaX = curr.x - last.x;
float deltaY = curr.y - last.y;
相关文章推荐
- IOS&Android通用屏幕控制(移动旋转缩放)
- IOS&Android通用屏幕控制(移动旋转缩放)
- android:android 移动avd的目录
- Android:手把手教你打造可缩放移动的ImageView
- Android Activity启动模式
- 百度地图移动版API 1.2.2版本(And…
- Android ViewPager实现应用…
- android 之多线程应用message…
- android -- 编译不同库…
- Android Fragment完全解析,…
- Android shell 启动java程序
- Android单张图片查看、单指移动、双指缩放、双击最大化或最小化
- FW:反编译Android apk文件
- android 4.0 "移动网络" 选项 不存在
- android 百度地图 &nbsp…
- android 实现图片加水印
- Android TextView文字横向自…
- Android 读取系统日志LogCat
- Android2.2 Socket关闭Bug的解决方…
- Android 自定义类库打包jar!…