



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* * 图片浏览、缩放、拖动、自动居中 */ public class ImageTouch extends Activity implements OnTouchListener Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); DisplayMetrics dm; ImageView imgView; Bitmap bitmap; 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; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); imgView = (ImageView) findViewById(R.id.imag);/ 获取控件 / bitmap = BitmapFactory.decodeResource(getResources(), / this.getIntent() / .getExtras().getInt(IMG);/ 获取图片资源 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);/ 获取图片资源 imgView.setImageBitmap(bitmap);/ 填充控件 imgView.setOnTouchListener(this);/ 设置触屏监听 dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm);/ 获取分辨率 minZoom(); center(); imgView.setImageMatrix(matrix); /* * 触屏监听 */ public boolean onTouch(View v, MotionEvent event) switch (event.getAction() & MotionEvent.ACTION_MASK) / 主点按下 case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); prev.set(event.getX(), event.getY(); mode = DRAG; break; / 副点按下 case MotionEvent.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; imgView.setImageMatrix(matrix); CheckView(); return true; /* * 限制最大最小缩放比例,自动居中 */ private void CheckView() float p = new float9; matrix.getValues(p); if (mode = ZOOM) if (p0 MAX_SCALE) matrix.set(savedMatrix); center(); /* * 最小缩放比例,最大为100% */ private void minZoom() minScaleR = Math.min( (float) dm.widthPixels / (float) bitmap.getWidth(), (float) dm.heightPixels / (float) bitmap.getHeight(); if (minScaleR 1.0) matrix.postScale(minScaleR, minScaleR); private void center() center(true, true); /* * 横向、纵向居中 */ 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(); float deltaX = 0, deltaY = 0; if (vertical) / 图片小于屏幕大小,则居中显示。大于屏幕,上方留空则往上移,下放留空则往下移 int screenHeight = dm.heightPixels; if (height 0) deltaY = -rect.top; else if (rect.bottom screenHeight) deltaY = imgView.getHeight() - rect.bottom; if (horizontal) int screenWidth = dm.widthPixels; if (width 0) deltaX = -rect.left; else if (rect.right screenWidth) deltaX = screenWidth - rect.right; matrix.postTranslate(deltaX, deltaY); /* * 两点的距离 */ 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); /* * 两点的中点 */
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届山东省滕州市鲍沟中学九年级化学第一学期期中检测试题含解析
- 2026届广东省惠州光正实验化学九年级第一学期期中复习检测模拟试题含解析
- 2026届北京三中学九年级化学第一学期期中学业质量监测试题含解析
- 山东省济南市济阳县2026届化学九上期中学业质量监测试题含解析
- 建筑行业离职人员技术秘密保密协议与竞业限制
- 离婚协议公证及财产分割与子女抚养及监护权转移合同
- 离婚协议标准范本:财产分配及子女监护实施协议
- 智能化空调系统箱涵施工与物联网应用合同
- 离婚协议中债务承担及财产分割详细约定范本
- 金融机构职业健康安全与客户隐私保护合同
- 延长劳动合同期限协议书
- 代办土地证协议书
- 创意美术课程教学大纲
- 2025年有机生态肥行业深度研究报告
- 2025年生物性污染对人体健康的危害与生物安全防控措施
- GB 20071-2025汽车侧面碰撞的乘员保护
- (2025)营养指导员考试真题库(含答案)
- 2025年注安道路运输安全实务真题卷(附解析)
- GB/T 45542-2025工业锅炉综合能效评价技术规范
- DB11 396-2006 地理标志产品 平谷大桃
- 2025胃癌诊疗规范
评论
0/150
提交评论