当前位置:操作系统 > 安卓/Android >>

android仿快图浏览,图片缩放移动效果

代码是拿别人的改的 ,原来的有些BUG ,项目加载的都是网络图片 还没弄左右滑动效果

 


yi 工具类

[java] package com.lin.image; 
 
 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Matrix; 
import android.graphics.PointF; 
import android.graphics.Rect; 
import android.util.FloatMath; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
 
public class MyImageView extends ImageView { 
    private    Matrix mMatrix; 
    private float bWidth;// 图片宽度  
    private float bHeight; 
     
    private int dWidth;//屏幕宽度  
    private int  dHeight;//屏幕高度  
    private float initScale; 
    private float mScale; 
    private float scale; 
    ImageState mapState = new ImageState(); 
    private float oldDist; 
    PointF mStart = new PointF(); 
    private Bitmap mBitmap; 
    float[] values = new float[9]; 
     
    Matrix initMatrix; 
    Matrix mSavedMatrix; 
     
    public MyImageView(Context context) { 
        super(context); 
         this.setScaleType(ScaleType.MATRIX); 
    } 
    public void init(MotionEvent event){ 
        mStart.set(event.getX(), event.getY()); 
        mSavedMatrix.set(mMatrix); 
         
    } 
    float rate=1.0f; 
     // 刷新界面  
    public void setView() { 
        //rate=rate/10*9;  
        // UserUtils.log(TAG, "set view", "set view");  
        //mMatrix.postScale(scale,scale,0,0);  
        this.setImageMatrix(mMatrix); 
         
        Rect rect = this.getDrawable().getBounds(); 
        this.getImageMatrix().getValues(values); 
        bWidth = rect.width() * values[0]; 
        bHeight = rect.height() * values[0]; 
 
        mapState.left = values[2]; 
        mapState.top = values[5]; 
        mapState.right = mapState.left + bWidth; 
        mapState.bottom = mapState.top + bHeight; 
    } 
    private float s=0.9f; 
    public void setScale(){ 
     
        float sX = dWidth / 2; 
        float sY = dHeight / 2; 
 
       mMatrix.postScale(s, s, sX, sY); 
       setView(); 
    } 
    public void setScreenSize(Context context, int width, int height,Bitmap bitmap) { 
         mBitmap =bitmap; 
        dWidth = width; 
        dHeight = height; 
        setImageBitmap(mBitmap); 
//        gd = new GestureDetector(context, new LearnGestureListener());  
 
        bWidth = mBitmap.getWidth(); 
        bHeight = mBitmap.getHeight(); 
        // mView = (ImageView) findViewById(R.id.imageView);  
        float xScale = (float) dWidth / bWidth; 
        float yScale = (float) dHeight / bHeight; 
        mScale = xScale <= yScale ? xScale : yScale; 
      scale = mScale < 1 ? mScale : 1; 
        initScale = scale; 
        mMatrix = new Matrix(); 
        mSavedMatrix = new Matrix(); 
        System.out.println("dwidth==="+dHeight+"  bHeight===="+bHeight); 
        // 平移  
        mMatrix.postTranslate((dWidth - bWidth) / 2, (dHeight - bHeight) / 2); 
 
        float sX = dWidth / 2; 
        float sY = dHeight / 2; 
         
        mSavedMatrix.set(mMatrix); 
       mMatrix.postScale(scale, scale, sX, sY); 
        setView(); 
    } 
     
    /** 计算移动距离 */ 
    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); 
    } 
    float backScale; 
    //缩放  
    public void zoom(MotionEvent event) { 
 
        float newDist = spacing(event); 
        if((mapState.right-mapState.left)>4*dWidth&&newDist>oldDist) 
            return; 
        Log.e("lin","oldDist="+oldDist+",newDist=="+newDist); 
        if (newDist > 10f&&Math.abs((newDist-oldDist))>10f) { 
            scale = newDist / oldDist; 
            if (scale < 1) { 
                mMatrix.postScale(scale, scale, d

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,