Android XML 图片缩放,Android 弹出框Dialog并缩放图片

package wdw.action.demo;

import wdw.action.R;

import android.app.Dialog;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.GestureDetector;

import android.view.GestureDetector.OnGestureListener;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;public classMyDialog extends Dialog{privateGestureDetector mGestureDetector;privateBitmap bm, bmTemp;private static final float SMALL_SCALE = 0.8f;private static final float BIG_SCALE = 1.25f;private int startX = 0, startY = 0;private intimageWidth, imageHeight;private float scaleWidth = 1, scaleHeight = 1;private intdisplayWidth, displayHeight;privateImageView imageView;privateButton imageSmall, imageBig, imageClose;publicMyDialog(Context context, Bitmap bm) {

super(context,R.style.dialog);this.bm =bm;this.bmTemp =bm;this.mGestureDetector = new GestureDetector(context, newViewGestureListener());

}protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.img);

imageView=(ImageView) findViewById(R.id.myImageView);

imageSmall=(Button) findViewById(R.id.image_small);

imageBig=(Button) findViewById(R.id.image_big);

imageClose=(Button) findViewById(R.id.image_close);

init();

writeImage();

bindListener();

}private voidinit() {

DisplayMetrics dm= newDisplayMetrics();

getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);

displayWidth=dm.widthPixels;

displayHeight=dm.heightPixels;

imageWidth=bm.getWidth();

imageHeight=bm.getHeight();

}private voidwriteImage() {int w = (w = bmTemp.getWidth()) > displayWidth ?displayWidth : w;int h = (h = bmTemp.getHeight()) > displayHeight ?displayHeight : h;if (startX + w <= bmTemp.getWidth() && startY + h <=bmTemp.getHeight()) {

Bitmap bmOrg=Bitmap.createBitmap(bmTemp, startX, startY, w, h);

imageView.setImageDrawable(newBitmapDrawable(bmOrg));

}

}private voidbuttonShow() {

imageSmall.setVisibility(View.VISIBLE);

imageBig.setVisibility(View.VISIBLE);

imageClose.setVisibility(View.VISIBLE);

}private voidbindListener() {

Button.OnClickListener imageButtonListener= newButton.OnClickListener() {public voidonClick(View v) {switch(v.getId()) {caseR.id.image_small:

resize(SMALL_SCALE);break;caseR.id.image_big:

resize(BIG_SCALE);break;caseR.id.image_close:

MyDialog.this.dismiss();break;default:break;

}

}

};

imageSmall.setOnClickListener(imageButtonListener);

imageBig.setOnClickListener(imageButtonListener);

imageClose.setOnClickListener(imageButtonListener);

}public boolean onTouchEvent(MotionEvent event) {

buttonShow();return mGestureDetector.onTouchEvent(event);

}private void resize(floatscale) {

Matrix matrix= newMatrix();

scaleWidth= scaleWidth *scale;

scaleHeight= scaleHeight *scale;

matrix.postScale(scaleWidth, scaleHeight);

bmTemp= Bitmap.createBitmap(bm, 0, 0, imageWidth, imageHeight, matrix, true);

writeImage();//小于图片实际大小就不让缩小

if (scaleWidth * scale * imageWidth < imageWidth || scaleHeight * scale * imageHeight

imageSmall.setEnabled(false);

imageSmall.setTextColor(Color.GRAY);

}else{

imageSmall.setEnabled(true);

imageSmall.setTextColor(Color.MAGENTA);

}//超过屏幕大小的5倍就不让放大

if (scaleWidth * scale * imageWidth > displayWidth * 5 || scaleHeight * scale * imageHeight > displayHeight * 5) {

imageBig.setEnabled(false);

imageBig.setTextColor(Color.GRAY);

}else{

imageBig.setEnabled(true);

imageBig.setTextColor(Color.MAGENTA);

}

}classViewGestureListener implements OnGestureListener{publicboolean onDown(MotionEvent e) {return false;

}public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, floatvelocityY) {return false;

}public voidonLongPress(MotionEvent e) {

}public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, floatdistanceY) {

startX= (startX + distanceX + displayWidth) > bmTemp.getWidth() ? startX : (int) (startX +distanceX);

startY= (startY + distanceY + displayHeight) > bmTemp.getHeight() ? startY : (int) (startY +distanceY);

startX= startX <= 0 ? 0: startX;

startY= startY <= 0 ? 0: startY;

writeImage();return false;

}public voidonShowPress(MotionEvent e) {

}publicboolean onSingleTapUp(MotionEvent e) {return false;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值