初学Android,手势缩放图片(四十八)
16lz
2021-01-26
下面的例子是用手势来缩放图片,手指往右划是放大,往左是缩小
下面效果在手机模拟器上呈现的只能是鼠标光标的划动了
package WangLi.IO.GestureZoom;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import android.widget.ImageView;public class GestureZoom extends Activity implements OnGestureListener{GestureDetector detector;ImageView imageView;//初始的图片资源Bitmap bitmap;//定义图片的宽,高int width,height;//记录当前的缩放比float currentScale = 1;//控制图片缩放的Matrix对象Matrix matrix; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //创建手势检测器 detector = new GestureDetector(this); imageView = (ImageView)findViewById(R.id.show); matrix = new Matrix(); //获取被缩放的源图片 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.hotel); //获得位图宽 width = bitmap.getWidth(); //获得位图高 height = bitmap.getHeight(); //设置ImageView初始化时显示的图片 imageView.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.hotel)); } @Override public boolean onTouchEvent(MotionEvent me) { //将Activity上的触碰事件交给GestureDetector处理 return detector.onTouchEvent(me); } @Overridepublic boolean onDown(MotionEvent arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {// TODO Auto-generated method stubvelocityX = velocityX > 4000 ? 4000 : velocityX;velocityX = velocityX < -4000 ? -4000 : velocityX;//根据手势的速度来计算缩放比,如果velocity > 0,放大图像,否则缩小图像currentScale += currentScale * velocityX / 4000.0f;//保证currentScale不会等于0currentScale = currentScale > 0.01 ? currentScale : 0.01f;//重置Matrixmatrix.reset();//缩放Matrixmatrix.setScale(currentScale, currentScale ,160, 200);BitmapDrawable tmp = (BitmapDrawable)imageView.getDrawable();//如果图片还未回收,先强制回收该图片if(!tmp.getBitmap().isRecycled()){tmp.getBitmap().recycle();}//根据原始位图和Matrix创建新图片Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix,true);imageView.setImageBitmap(bitmap2);return false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}}
更多相关文章
- 关于android获得图片的总结
- Android(安卓)6种快速开发框架
- 关于Android加载图片时的OOM的一些解决方法和优化
- Android、web中的图片和语音的加密
- Android(安卓)ListView 图片异步加载和图片内存缓存
- Android(安卓)缓存浅谈(一) LruCache
- Android播放多张图片形成的一个动画示例
- Android(安卓)- 分享内容 - 接收其他APP的内容
- android 视频和图片切换并进行自动轮播