您的位置:首页 > 其它

缩放图片的ImageView 可以进行两指缩放,并且可以进行拖拉的ImageView最简单原生的实现

2014-05-15 15:05 411 查看
今天小试了下所谓的图片察看器,可以对图片进行放大缩小和拖动。这样看上去就可以更好的查看图片了

今天自己写了个小例子,实现了基本功能,可谓最简单的实现方法,大家可以参考,可以对下面这个类进行二次修改达到自己的目的

,以下就是ScaleImageView:

package com.spider.zjd.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;

/**
* 可以进行两指缩放,并且可以进行拖拉的ImageView最简单原生的实现
* @author Seal
* Created on 2014年5月15日 下午2:08:49
* @note
*/
public class ScaleImageView extends ImageView {
private float lastX, lastY;// 上一次记录的点
private float lastDistance;//上一次两点间的距离

public ScaleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public ScaleImageView(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();

break;
case MotionEvent.ACTION_MOVE:
if (event.getPointerCount() == 2) {//两点触摸
final float disX = Math.abs(event.getX(0) - event.getX(1));//第一个点的偏移量
final float disY = Math.abs(event.getY(0) - event.getY(1));//第二个点的偏移量
final float dis = (float) Math.sqrt(disX * disX + disY * disY);//记录两点间的距离
if (lastDistance == 0) {
lastDistance = dis;//记录第一次
} else {
float scale = dis / lastDistance;
lastDistance = dis;//替换上一次
scaleImage(scale);
}
} else if (event.getPointerCount() == 1) {//单点触摸
final float currentX = event.getX();
final float currentY = event.getY();
final float disX = currentX - lastX;
final float disY = currentY - lastY;
scrollBy(-(int) disX, -(int) disY);//进行拖动视图
lastX = currentX;//替换上一次位置
lastY = currentY;
}
break;
case MotionEvent.ACTION_UP:
lastX = 0;//恢复初始化状态
lastY = 0;
lastDistance = 0;
break;
default:
break;
}

super.onTouchEvent(event);
return true;
}

/**
* 进行缩放
* @param scale
*/
private void scaleImage(float scale) {
final int width = getWidth();
final int newWidth = (int) (width * scale);
final int height = getHeight();
final int newHeight = (int) (height * scale);
LayoutParams params = getLayoutParams();
params.height = newHeight;
params.width = newWidth;
setLayoutParams(params);
}

}


使用方法:

1.代码中直接实例化

ScaleImageView image = new ScaleImageView(NewsDetailActivity.this);

2.在XML布局中直接使用

<your_package.ScaleImageView

android:id="@+id/iv_public_weather"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

效果图如下:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: