亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android 圖片操作(縮放移動) 實例代碼

2020-04-11 12:05:52
字體:
來源:轉載
供稿:網友

view_show.xml

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
    <FrameLayout
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">
        <ImageView
            android:id="@+id/view_img"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:background="@drawable/camera_gray"/>
        <ImageButton
            android:id="@+id/view_close"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="top|left"
            android:layout_margin="5dip"/>
        <ImageButton
            android:id="@+id/view_del"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="top|right"
            android:layout_margin="5dip"/>
        <ImageButton
            android:id="@+id/view_narrow"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:layout_marginRight="10dip"/>
        <ImageButton
            android:id="@+id/view_amplification"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:layout_marginLeft="10dip"/>
    </FrameLayout>
</LinearLayout>

GalleryViewTouch.java:

復制代碼 代碼如下:

package com.kotei.lbs.Anthurium.LawCases;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.RectF;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

/**
 * 查看圖片的操作
 * @author hongj
 */
public class GalleryViewTouch extends Activity  {
    private ImageView iv;
     private Bitmap bitmap=null;
        Matrix matrix = new Matrix();
        Matrix savedMatrix = new Matrix();
        DisplayMetrics dm;
        float minScaleR;// 最小縮放比例
        static final float MAX_SCALE = 4f;// 最大縮放比例
        static final int NONE = 0;// 初始狀態
        static final int DRAG = 1;// 拖動
        static final int ZOOM = 2;// 縮放
        int mode = NONE;
        PointF prev = new PointF();
        PointF mid = new PointF();
        float dist = 1f;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.view_show);
        dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);// 獲取分辨率
        bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bottom_layout_background);
        iv=(ImageView)findViewById(R.id.view_img);
        iv.setImageBitmap(bitmap);
        iv.setOnTouchListener(new ImageTouch(bitmap,dm.widthPixels,dm.heightPixels,iv));

    }

    class ImageTouch implements OnTouchListener {
        private ImageView iv;
         private Bitmap bitmap=null;
            Matrix matrix = new Matrix();
            Matrix savedMatrix = new Matrix();
            int dmwidth,dmheight;
            float minScaleR;// 最小縮放比例
            static final float MAX_SCALE = 4f;// 最大縮放比例
            static final int NONE = 0;// 初始狀態
            static final int DRAG = 1;// 拖動
            static final int ZOOM = 2;// 縮放
            int mode = NONE;
            PointF prev = new PointF();
            PointF mid = new PointF();
            float dist = 1f;
            ImageTouch(Bitmap bitmap,int width,int height,ImageView iv){
                this.bitmap= bitmap;
                this.dmwidth=width;
                this.dmheight=height;
                this.iv=iv;
                initImage();
            }
            public void initImage(){
                if (dmwidth < bitmap.getWidth()|| dmheight < bitmap.getHeight()) {

                    minZoom();
                    center();
                    iv.setImageMatrix(matrix);
                } else {
                    iv.setScaleType(ScaleType.CENTER);
                }
            }
        @Override

        public boolean onTouch(View v, MotionEvent event) {
             switch (event.getAction() & MotionEvent.ACTION_MASK) {
                // 主點按下
                case MotionEvent.ACTION_DOWN:
                    Log.d("System.out", "ACTION_DOWN");
                    savedMatrix.set(matrix);
                    prev.set(event.getX(), event.getY());
                    mode = DRAG;
                    break; // 副點按下
                case MotionEvent.ACTION_POINTER_DOWN:
                    Log.d("System.out", "ACTION_POINTER_DOWN");
                    dist = spacing(event); // 如果連續兩點距離大于10,則判定為多點模式
                    if (spacing(event) > 10f) {
                        savedMatrix.set(matrix);
                        midPoint(mid, event);
                        mode = ZOOM;
                    }
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_POINTER_UP:
                    mode = NONE;
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (mode == DRAG) {
                        matrix.set(savedMatrix);
                        matrix.postTranslate(event.getX() - prev.x, event.getY()
                                - prev.y);

                    } else if (mode == ZOOM) {
                        float newDist = spacing(event);
                        if (newDist > 10f) {
                            matrix.set(savedMatrix);
                            float tScale = newDist / dist;
                            matrix.postScale(tScale, tScale, mid.x, mid.y);
                        }
                    }
                    break;
                }

                iv.setImageMatrix(matrix);
                if(mode!=NONE)
               CheckView();

                return true;
        }
         private void CheckView() {
                float p[] = new float[9];
                matrix.getValues(p);
                if (mode == ZOOM) {
                    if (p[0] < minScaleR) {
                        matrix.setScale(minScaleR, minScaleR);
                    }
                    if (p[0] > MAX_SCALE) {
                        matrix.set(savedMatrix);
                    }
                }
                center();
            }

         public void minZoom() {
                Log.i("test", bitmap.getWidth()+"");
                Log.i("test", bitmap.getHeight()+"");
                minScaleR = Math.min(
                        (float) dmwidth / (float) bitmap.getWidth(),
                        (float) dmheight / (float) bitmap.getHeight());
                if (minScaleR < 1.0) {
                    matrix.postScale(minScaleR, minScaleR);
                }
            }
          protected void center(boolean horizontal, boolean vertical) {
                Matrix m = new Matrix();
                m.set(matrix);
                RectF rect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
                m.mapRect(rect);
                float height = rect.height();
                float width = rect.width();
                Log.d("System.out",rect.top+"************"+ rect.bottom);
                float deltaX = 0, deltaY = 0;
                if (vertical) { // 圖片小于屏幕大小,則居中顯示。大于屏幕,上方留空則往上移,下方留空則往下移

                    int screenHeight = dmheight;
                    if (height < screenHeight) {
                        deltaY = (screenHeight - height) / 2 - rect.top;
                    } else if (rect.top > 0) {
                        deltaY = -rect.top;
                    } else if (rect.bottom < screenHeight) {
                        deltaY = iv.getHeight() - rect.bottom;
                    }
                    //deltaY-=50;
                }
                if (horizontal) {
                    int screenWidth = dmwidth;
                    if (width < screenWidth) {
                        deltaX = (screenWidth - width) / 2 - rect.left;
                    } else if (rect.left > 0) {
                        deltaX = -rect.left;
                    } else if (rect.right < screenWidth) {
                        deltaX = screenWidth - rect.right;
                    }
                }
                matrix.postTranslate(deltaX, deltaY);
            }
         public void center() {
                center(true, true);
            }
         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);
            }

            /** * 兩點的中點 */
            private void midPoint(PointF point, MotionEvent event) {
                float x = event.getX(0) + event.getX(1);
                float y = event.getY(0) + event.getY(1);
                point.set(x / 2, y / 2);
            }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品大片wwwwww| 亚洲伊人久久大香线蕉av| 欧美性猛交xxxxx免费看| 日韩一区二区三区国产| 色yeye香蕉凹凸一区二区av| 亚洲人成绝费网站色www| 欧美激情国产日韩精品一区18| 91精品视频网站| 黑人狂躁日本妞一区二区三区| 色yeye香蕉凹凸一区二区av| 久久久999成人| 中文字幕国内精品| 91精品国产777在线观看| 国产精品美女久久久免费| 精品中文字幕视频| 97国产真实伦对白精彩视频8| 中文字幕少妇一区二区三区| 国产美女直播视频一区| 欧美性猛交xxxx| 国产精品丝袜视频| 亚洲国产精品视频在线观看| 91国自产精品中文字幕亚洲| 日韩中文在线中文网在线观看| 92看片淫黄大片看国产片| 亚洲男女自偷自拍图片另类| 国产精品v日韩精品| 国产91在线播放精品91| 精品久久久久久国产91| 色婷婷**av毛片一区| 日本精品一区二区三区在线| 国产精品午夜国产小视频| 国语自产精品视频在线看| 亚洲伊人第一页| 久久久久久欧美| 91av国产在线| 国产亚洲日本欧美韩国| 影音先锋日韩有码| 国产欧美日韩中文| 91美女片黄在线观| 国产成人在线一区| 97香蕉超级碰碰久久免费软件| www.色综合| 中文字幕亚洲综合| 性色av一区二区三区免费| 亚洲精品日韩在线| 亚洲欧美在线磁力| 亚洲天堂av网| 久久久精品2019中文字幕神马| 国产精品美女无圣光视频| 欧美激情精品久久久久久大尺度| 亚洲第一免费播放区| 亚洲欧美变态国产另类| 亚洲午夜性刺激影院| 日韩电视剧在线观看免费网站| 国产成人亚洲综合青青| 欧美日韩精品中文字幕| 亚洲大胆人体av| 国产精品网站入口| 国产精品美女视频网站| 欧美成人一区二区三区电影| 亚洲国产成人精品久久久国产成人一区| 91av视频在线播放| 亚洲成人网久久久| 久久精品免费播放| 国产在线98福利播放视频| 国产精品大陆在线观看| 成人福利视频网| 欧美日韩亚洲一区二区三区| 一夜七次郎国产精品亚洲| 国产精品igao视频| 成人黄色av免费在线观看| 日韩欧美国产免费播放| 国产美女精品视频免费观看| 亚洲视频axxx| 国产美女久久精品| 51精品国产黑色丝袜高跟鞋| 欧美一级视频一区二区| 亚洲国产欧美一区二区三区久久| 欧美专区福利在线| 亚洲а∨天堂久久精品9966| 国产精品情侣自拍| 欧美午夜视频一区二区| 精品国产依人香蕉在线精品| 热久久免费国产视频| www.亚洲一区| 中文字幕久精品免费视频| 日韩精品在线第一页| 亚洲欧美国产精品专区久久| 性欧美xxxx视频在线观看| 久久精品国产2020观看福利| 欧美午夜激情视频| 国产精品久久久久久久久久久新郎| 久久久精品久久| 亚洲国产成人一区| 懂色av一区二区三区| 成人a级免费视频| 亚洲精品第一页| 成人国内精品久久久久一区| 欧美亚洲国产成人精品| 精品美女久久久久久免费| 精品亚洲va在线va天堂资源站| 欧美综合国产精品久久丁香| 久久久影视精品| 97精品一区二区视频在线观看| 国产999在线观看| 欧美日韩国产中文精品字幕自在自线| 日韩av综合中文字幕| 精品久久久久久亚洲精品| 国产精品视频免费观看www| 一区二区三区天堂av| 亚洲国产精品热久久| 欧美成人免费大片| 欧美日韩国产成人高清视频| 国产不卡av在线免费观看| 精品福利免费观看| 日本人成精品视频在线| 欧美诱惑福利视频| 亚洲第一页在线| 国产精品免费看久久久香蕉| 久久国产精彩视频| 亚洲一区二区中文| 清纯唯美亚洲综合| 欧美激情视频免费观看| 亚洲区在线播放| 日韩精品有码在线观看| 欧美极品欧美精品欧美视频| 欧美久久久精品| 久久精品99久久久久久久久| 69av在线视频| 成人淫片在线看| 亚洲大尺度美女在线| 欧美床上激情在线观看| 国产精品va在线播放| 久久精品国产视频| 亚洲日韩第一页| 欧美丝袜一区二区| 欧美性极品少妇精品网站| 久久久免费观看| 美女福利精品视频| 欧美日韩国产精品一区二区三区四区| 国产精品九九久久久久久久| 久久免费精品视频| 亚洲已满18点击进入在线看片| 4p变态网欧美系列| 国产在线视频91| 精品夜色国产国偷在线| 日韩大陆毛片av| 欧美成人精品三级在线观看| 亚洲精品www久久久| 日韩一区二区在线视频| www高清在线视频日韩欧美| 中文字幕日韩电影| 亚洲性生活视频| 久久91精品国产91久久久| 成人黄色大片在线免费观看| 欧美日韩国产一区二区三区| 日韩中文字幕在线| 最近2019年好看中文字幕视频| 国产精品久久久久久久久免费看| 国产精品视频网| 日韩高清av在线| 日韩免费av片在线观看| 国产精品成人v| 韩国精品美女www爽爽爽视频|