2019独角兽企业重金招聘Python工程师标准>>>

android中,图片的放大和缩小是很重要的一个方法,我们主要用到的就是bitmap、MotionEvent
、Matrix、KeyEvent、OnTouchListene、ImageView
。还有很多,在做图片的放大和缩小我们要知道的是, 取得屏幕分辨率大小,始化相关变量,还要定义的是图片缩小和放大的比例,我们还得判断图片太大,超出屏幕怎么办。下面我们就来看看图片的放大和缩小吧。

package EOE.android; import Android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast; public class DisplayImage extends Activity implements OnTouchListener, OnGestureListener {
private static final String TAG = "DisplayImage";
private static final int FLING_MIN_DISTANCE = 100;
private static final int FLING_MIN_VELOCITY = 200; /* 相关变量声明 */
private ImageView mImageView;
private Button mButton01;
private Button mButton02;
private FrameLayout layout1;
private LinearLayout layoutImage;
private Bitmap bmp;
private int id=0;
private int displayWidth;
private int displayHeight;
private float scaleWidth=1;
private float scaleHeight=1;
private GestureDetector mGestureDetector; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* 加载display.xml Layout */
setContentView(R.layout.display); /* 取得屏幕分辨率大小 */
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
displayWidth=dm.widthPixels;
displayHeight=dm.heightPixels; /* 初始化相关变量 */
Bundle bundle = this.getIntent().getExtras();
Integer imageId = bundle.getInt("imageId");
Log.i(TAG, "onCreate, imageId = " + imageId); bmp=BitmapFactory.decodeResource(getResources(), imageId);
mImageView = (ImageView)findViewById(R.id.myImageView);
mImageView.setImageBitmap(bmp);
mImageView.setOnTouchListener(this);
mImageView.setLongClickable(true); layout1 = (FrameLayout)findViewById(R.id.layout1);
layoutImage = (LinearLayout)findViewById(R.id.layoutImage);
mButton01 = (Button)findViewById(R.id.myButton1);
mButton02 = (Button)findViewById(R.id.myButton2); /* 缩小按钮onClickListener */
mButton01.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
small();
}
}); /* 放大按钮onClickListener */
mButton02.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
big();
}
});
} // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
// Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
Log.i(TAG, "onDown..."); return false;
} /* 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
* 多个ACTION_MOVE, 1个ACTION_UP触发
* 参数解释:
* e1:第1个ACTION_DOWN MotionEvent
* e2:最后一个ACTION_MOVE MotionEvent
* velocityX:X轴上的移动速度,像素/秒
* velocityY:Y轴上的移动速度,像素/秒
* 触发条件 :
* X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
* @see android.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.i(TAG, "onFling..."); if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling left Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) { // Fling right Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
} return false;
} // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.i(TAG, "onLongPress..."); } // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
Log.i(TAG, "onScroll..."); return false;
} // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.i(TAG, "onShowPress..."); } // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Log.i(TAG, "onSingleTapUp..."); return false;
} @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Log.i(TAG, "onTouch..."); // Set button visible
mButton01.setVisibility(View.VISIBLE);
mButton02.setVisibility(View.VISIBLE); return mGestureDetector.onTouchEvent(event);
} // @Override
// public boolean onTouchEvent(MotionEvent event) {
// // TODO Auto-generated method stub
// super.onTouchEvent(event);
//
// Log.i(TAG, "onTouchEvent");
// // Set button visible
// mButton01.setVisibility(View.VISIBLE);
// mButton02.setVisibility(View.VISIBLE);
//
// return true;
// } @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
super.onKeyDown(keyCode, event); Log.i(TAG, "onKeyDown...");
// Set button visible
mButton01.setVisibility(View.VISIBLE);
mButton02.setVisibility(View.VISIBLE); return true;
} /* 图片缩小的method */
private void small() {
int bmpWidth=bmp.getWidth();
int bmpHeight=bmp.getHeight(); Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight); /* 设置图片缩小的比例 */
double scale=0.8;
/* 计算出这次要缩小的比例 */
scaleWidth=(float) (scaleWidth*scale);
scaleHeight=(float) (scaleHeight*scale);
/* 产生reSize后的Bitmap对象 */
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
bmpHeight,matrix,true); if(id==0) {
/* 如果是第一次按,就删除原来默认的ImageView */
layoutImage.removeView(mImageView);
} else {
/* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
layoutImage.removeView((ImageView)findViewById(id));
} /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
id++;
ImageView imageView = new ImageView(this);
imageView.setId(id);
imageView.setImageBitmap(resizeBmp);
layoutImage.addView(imageView);
Log.i(TAG, "imageView.getWidth() = " + imageView.getWidth()
+ ", imageView.getHeight() = " + imageView.getHeight());
setContentView(layout1);
/* 因为图片放到最大时放大按钮会disable,所以在缩小时把它重设为enable */
mButton02.setEnabled(true);
mButton02.setTextColor(Color.MAGENTA);
} /* 图片放大的method */
private void big() {
int bmpWidth=bmp.getWidth();
int bmpHeight=bmp.getHeight(); Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight); /* 设置图片放大的比例 */
double scale=1.25;
/* 计算这次要放大的比例 */
scaleWidth=(float)(scaleWidth*scale);
scaleHeight=(float)(scaleHeight*scale);
/* 产生reSize后的Bitmap对象 */
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
bmpHeight,matrix,true); if(id==0) {
/* 如果是第一次按,就删除原来设置的ImageView */
layoutImage.removeView(mImageView);
} else {
/* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
layoutImage.removeView((ImageView)findViewById(id));
} /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
id++;
ImageView imageView = new ImageView(this);
imageView.setId(id);
imageView.setImageBitmap(resizeBmp);
layoutImage.addView(imageView);
setContentView(layout1);
/* 如果再放大会超过屏幕大小,就把Button disable */
if( scaleWidth * scale * bmpWidth > bmpWidth * 3 ||
scaleHeight * scale * bmpHeight > bmpWidth * 3 ||
scaleWidth * scale * bmpWidth > displayWidth * 5 ||
scaleHeight * scale * bmpHeight > displayHeight * 5) {
mButton02.setEnabled(false);
mButton02.setTextColor(Color.GRAY);
} else {
mButton02.setEnabled(true);
mButton02.setTextColor(Color.MAGENTA);
}
} }

转载于:https://my.oschina.net/u/555639/blog/226899

Android 图片放大缩小相关推荐

  1. android 图片放大缩小_贴在手机上的显微镜,轻松放大400倍,化身“蚁人”玩转微观世界...

    记得在漫威电影<蚁人>里,男猪脚只要穿上那套黑科技制服,按下开关,"咻"的一声就缩到蚂蚁大小,并操控蚂蚁.昆虫和自己并肩作战!!简直不要太酷! 蚁人"进入微观 ...

  2. android 图片放大缩小_几款堪称神器的图片无损放大缩小工具!

    Bigjpg Bigjpg是一款非常强大的能放大图片并使其不失真的工具. 一般来说,图片在经过PS或PhotoZoom放大之后,都会出现一定程度的损害和模糊,而Bigjpg可以让放大的图片无损. Bi ...

  3. android 图片放大缩小 多点触摸,Android 多点触摸(图片放大缩小)

    就不说什么了,有注释 基本有基础的都看得懂 欢迎加入我的交流群: 386451316 main.xml文件 xmlns:tools="http://schemas.android.com/t ...

  4. android 图片放大缩小,android中图片放大缩小...

    ClickListener(){ public void onClick(View v){ big(); } }); } private void small(){ //获得Bitmap的高和宽 in ...

  5. 图片放大缩小旋转左移右移镜像倒影android

    图片放大缩小旋转左移右移镜像倒影 demo: TestImage 1. 将 meinv.jpg 图片拷贝到以下目录TestImage\app\src\main\res\mipmap-hdpi 1.An ...

  6. Android实现图片放大缩小

    蓝蓝的天 蓝蓝的天,白云朵朵. White clouds in the blue sky. 目录视图 摘要视图 订阅 新版极客头条上线,每天一大波干货     任玉刚:Android开发者的职场规划  ...

  7. imageView图片放大缩小及旋转

    imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...

  8. css3 图片放大缩小闪烁效果

    直接把图片替换就可以了,我的图片是透明的,所以body设置为黑色的,不不要可以去掉 <!doctype html> <html lang="en"> < ...

  9. vue项目 一行js代码搞定点击图片放大缩小

    一行js代码搞定xue项目需要点击图片放大缩小,其实主要用的是用到了vue:class的动态切换,内容比较简单.一开始我把维护的需求想得太复杂了,和测试小姐姐聊了一下才反应过来. 两个月不到跟了四个项 ...

最新文章

  1. [转]VSTO Office二次开发RibbonX代码结构
  2. 设计模式:享元(FlyWeight)模式
  3. npoi 所有列调整为一页_必能用到,一页PPT中想放超多图片怎么办?
  4. rufus linux开机密码,使用Rufus 3.4制作Ubuntu 18.04.1 U盘启动盘的方法
  5. 2019年末逆向复习系列之今日头条WEB端_signature、as、cp参数逆向分析
  6. Java常用设计模式——观察者模式
  7. 强化学习 —— gym
  8. lstrip和rstrip_Python装饰字符串– rstrip(),lstrip(),strip()
  9. 银行卡按卡号识别银行
  10. 2020年,生活从“不易”开始
  11. element 如何使用自定义icon图标
  12. 360浏览器网页按钮点击无效
  13. js 对象中添加新属性
  14. oracle中删除表的四种基本操作 2021-11-03
  15. Node: Puppeteer + 图像识别 实现百度指数爬虫
  16. 操作系统 chap-5(2) 存储管理
  17. matlab中如何处理复数,matlab中复数的处理函数
  18. 经济基础知识(初级)【9】
  19. python在无人驾驶中的应用_深度学习在无人驾驶汽车中的应用
  20. PHP:微信公众号的红包发送功能

热门文章

  1. python最佳实践笔记
  2. 转 Django+Bootstrap练习--我的类博客系统开发
  3. 单链表的C++实现(采用模板类)
  4. 残疾人无障碍设施工程改造送上门 900户家庭
  5. 6/7 SELECT语句:过滤(正则表达式REGEXP)
  6. linux下静态库和动态库的制作与使用
  7. javascript 练习(2)——js数组去重
  8. Quartus16.0如何使用TCL脚本
  9. H5外部浏览器直接调起微信——通过url协议 weixin:// 判断是否安装微信及启动微信...
  10. stein法求gcd 学习笔记