android图片缩放、放大demo - Android实例教程

示例
原图:

拖动查看其他部分:
 

放大仔细查看

代码示例,注释比较详细,其他不多讲了

package com.study.drascale;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
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
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        imageView = (ImageView) findViewById(R.id.img);
        imageView.setOnTouchListener(new TounchListener());
    }
    private class TounchListener implements OnTouchListener{
     
     private PointF startPoint = new PointF();
     private Matrix matrix = new Matrix();
     private Matrix currentMaritx = new Matrix();
     
     private int mode = 0;//用于标记模式
     private static final int DRAG = 1;//拖动
     private static final int ZOOM = 2;//放大
     private float startDis = 0;
     private PointF midPoint;//中心点
  public boolean onTouch(View v, MotionEvent event) {
   switch (event.getAction() & MotionEvent.ACTION_MASK) {
   case MotionEvent.ACTION_DOWN:
    mode = DRAG;
    currentMaritx.set(imageView.getImageMatrix());//记录ImageView当期的移动位置
    startPoint.set(event.getX(),event.getY());//开始点
    break;
   case MotionEvent.ACTION_MOVE://移动事件
    if (mode == DRAG) {//图片拖动事件
     float dx = event.getX() - startPoint.x;//x轴移动距离
     float dy = event.getY() - startPoint.y;
     matrix.set(currentMaritx);//在当前的位置基础上移动
     matrix.postTranslate(dx, dy);
     
    } else if(mode == ZOOM){//图片放大事件
     float endDis = distance(event);//结束距离
     if(endDis > 10f){
      float scale = endDis / startDis;//放大倍数
      matrix.set(currentMaritx);
      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(event);
    
    if(startDis > 10f){//避免手指上有两个茧
     midPoint = mid(event);
     currentMaritx.set(imageView.getImageMatrix());//记录当前的缩放倍数
    }
    
    break;

}
   imageView.setImageMatrix(matrix);
   return true;
  }
     
    }
    /**
     * 两点之间的距离
     * @param event
     * @return
     */
    private static float distance(MotionEvent event){
     //两根线的距离
     float dx = event.getX(1) - event.getX(0);
     float dy = event.getY(1) - event.getY(0);
     return FloatMath.sqrt(dx*dx + dy*dy);
    }
    /**
     * 计算两点之间中心点的距离
     * @param event
     * @return
     */
    private static PointF mid(MotionEvent event){
     float midx = event.getX(1) + event.getX(0);
     float midy = event.getY(1) - event.getY(0);
     
     return new PointF(midx/2, midy/2);
    }
}

示例下载:
http://download.csdn.net/detail/sdefzhpk/4542576

来自为知笔记(Wiz)

时间: 2024-09-29 01:45:35

android图片缩放、放大demo - Android实例教程的相关文章

android 图片缩放抗锯齿

之前用的时候只设置了antialias属性,其实要设置两个flag才行 1 paint.setFlags(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 2 //或者 3 canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); android 图片缩放抗锯齿

Android 图片缩放方法

转载地址 :http://blog.csdn.net/chaihuasong/article/details/7395050 提示: options.inJustDecodeBounds = true;   设置为 true 该图片不需要加入到内存 inSampleSize  只有是2的幂,比如:值是9,实际压缩是8倍,值是10,实际压缩也是8倍. 方法1:按固定比例进行缩放 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法

Android 图片的放大缩小拖拉

package com.example.ImageView; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.*; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask;

Android图片缩放,压缩总结(inSampleSize,Matrix比较)

Android中经常会遇到需要对图片进行缩放及压缩的操作,下面列出3种图片缩放方法: 一.图片缩放 1.inSampleSize(采样率) 优点:效率较高,解析速度快 缺点:采样率inSampleSize的取值只能是2的次方数(例如:inSampleSize=15,实际取值为8;inSampleSize=17,实际取值为16;实际取值会往2的次方结算),因此该方法不能精确的指定图片的大小 2.Matrix 优点:可以精确地指定图片的缩放大小 缺点:是在原bitmap的基础之上生成的,占内存,效率

Android 图片缩放

通过计算图片缩放值进行图片缩放 /** * 根据路径获得突破并压缩返回bitmap用于显示 * * @param filePath * @return */ public static Bitmap getSmallBitmap(String filePath, int width, int height) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds

android 图片双击放大倍数的算法

图片双击放大倍数和图片大小.显示图片的view大小,及图片当前的scale大小均有关系. 为了避免图片放大过大,设置了一个放大倍数的最大限制SCALE_LIMIT,目前该值为4. 具体算法如下所示: 图片的宽和高分别记为:imageW imageH 显示图片的view宽和高分别记为:viewW viewH 几个重要的比例记为: scale_1 = viewW / imageW scale_2 = viewH / imageH scale_3 = viewW / imageH scale_4 =

Android图片缩放 指定尺寸

//使用Bitmap加Matrix来缩放 public static Drawable resizeImage(Bitmap bitmap, int w, int h) { Bitmap BitmapOrg = bitmap; int width = BitmapOrg.getWidth(); int height = BitmapOrg.getHeight(); int newWidth = w; int newHeight = h; float scaleWidth = ((float) n

Android 视频缩放/放大

1. 原理 不直接改变Codec输出的视频宽高比,而是改变视频播放器窗口的大小. 2. 设置Window 需要将Window设置未可以超出屏幕尺寸 mWindow.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 3. SurfaceView保持宽高比 mSurfaceHolder.setFixedSize(mVideoWidt

android关于图片缩放

网上有许多关于图片缩放的demo,本人都感觉不怎么好用,最近在github看到了 一个简单的支持多指缩放图片的Android View类 gesture-imageview (地址:https://github.com/jasonpolites/gesture-imageview),感觉还挺好用的,现在写个demo方便以后用于调用 第一步:添加库,推荐直接下载zip,导入工程后,直接将main里的com.polites.android包直接复制到自己的工程中,方便自己以后修改 第二步:由于我只需