本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助。

前两天朋友问我一个问题,如何实现从手机系统相册加载一张图片,实现拖拽、缩放功能并且能镜像显示,当时我的第一反应是继承ImageView,重写onDraw方法,下面就按照这个思路实现下需求。

从系统相册选择图片

打开系统相册采用隐式Intent,因为调用者需要接受返回的结果,所以使用startActivityForResult启动Activity,打开系统相册核心代码如下

public final static int ALBUM_PIC_CODE =   1;...Intent intent = new   Intent(Intent.ACTION_PICK);intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intent,   ALBUM_PIC_CODE);

通过打印日志的方式看一下从系统相册中选择图片以后返回的内容是什么:

可以断定这是个Uri,那么好,我们直接通过Uri获取图片即可:<_x001a_ target="_blank">vcD4NCjxwcmUgY2xhc3M9"brush:java;">

protected void onActivityResult(int requestCode, int resultCode, Intent   data) {

super.onActivityResult(requestCode,   resultCode, data);

if (requestCode == ALBUM_PIC_CODE   && resultCode == RESULT_OK){

Log.i("onActivityResult",   data.getData().toString());

try {

Uri imageUri = data.getData();

Bitmap bitmap=   BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));

iv.setImageBitmap(bitmap);

} catch (FileNotFoundException e)   {

e.printStackTrace();

}

}

}

这样我们就通过Uri以流的方式载入了图片

重写ImageView

载入图片以后,我们需要在显示以前对图片进行处理以达到所需的显示效果,我了方便我就直接对系统控件ImageView进行重写来达到想要的功能。

拖拽功能

要实现拖拽功能,首先会想到重写onTouchEvent方法,需要在手指落下时获取坐标点的信息,并在手指移动时根据移动的位置实时更新图片位置.

public boolean onTouchEvent(MotionEvent event) { switch   (event.getAction()) {  case MotionEvent.ACTION_DOWN:lastX =   event.getX();lastY = event.getY();break;  case   MotionEvent.ACTION_MOVE:float currentX = event.getX();float currentY =   event.getY();offsetX += currentX - lastX;//计算移动距离offsetY += currentY - lastY;lastX = currentX;//替换上一次位置lastY =   currentY;break;  case   MotionEvent.ACTION_UP:break;  default:break; } super.onTouchEvent(event); return   true;}

重写onDraw方法对图片位置进行实时更新

protected void onDraw(Canvas canvas) { if (bitmap != null)   {  bitmapWidth = bitmap.getWidth();  bitmapHeight =   bitmap.getHeight();  try {int scaleHeight = (int) (viewWidth /   (float) bitmapWidth * bitmapHeight);bitmapLeft = (int) offsetX;bitmapRight =   (int) (viewWidth + offsetX);bitmapTop = (int) offsetY;bitmapBottom = (int)   (scaleHeight + offsetY);Paint paint = new Paint();canvas.drawBitmap(bitmap,   new Rect(0, 0, bitmapWidth, bitmapHeight),  new Rect(bitmapLeft,   bitmapTop, bitmapRight, bitmapBottom), paint);  } catch (Exception   e) {e.printStackTrace();  }  invalidate(); } else   {  try {bitmap = ((BitmapDrawable)   getDrawable()).getBitmap();  } catch (Exception e)   {e.printStackTrace();bitmap = null;  } }}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...相关推荐

  1. android将控件镜像显示,Android重写ImageView实现图片镜像效果

    前两天朋友问我一个问题,如何实现从手机系统相册加载一张图片,实现拖拽.缩放功能并且能以屏幕中间为分界线镜像显示,当时我的第一反应是继承ImageView,重写onDraw方法,下面就按照这个思路逐步实 ...

  2. Android重写ImageView实现图片镜像效果

    前两天朋友问我一个问题,如何实现从手机系统相册加载一张图片,实现拖拽.缩放功能并且能以屏幕中间为分界线镜像显示,当时我的第一反应是继承ImageView,重写onDraw方法,下面就按照这个思路逐步实 ...

  3. Android移动应用开发之TextView实现阴影跑马灯文字效果

    文章目录 前言 创建项目 配置文件简介 阴影走马灯文字 values/string.xml values/colors.xml layout/activity_main.xml 法2 main/jav ...

  4. 3G应用开发之Android 传智播客 基础知识总结

    3G应用开发之Android Android应用开发之3G  3G应用开发之Android 3G应用开发之Android 应用开发之 讲师: 讲师:黎活明 北京传智 播客教育 www.itcast.c ...

  5. android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...

    本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android   5.0及以上编程实现屏幕截图功能 ...

  6. android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...

    本文将带你了解Android应用开发之android   判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...

  7. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...

    本文将带你了解Android应用开发之Android Activity栈管理  制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...

  8. java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例

    本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android   EditText输入框,并没有 ...

  9. android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...

    本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...

最新文章

  1. 内存泄漏和内存溢出有什么区别
  2. python 常见函数_Python基础函数:初学者常用的十个Python函数,非常全面!
  3. mysql浅拷贝_深入理解浅拷贝和深拷贝
  4. php node 目录,node.js基于fs模块对系统文件及目录进行读写操作的方法详解
  5. Siamese网络(孪生神经网络)详解
  6. 条件、循环、函数定义 练习
  7. error_reporting
  8. mysql 计算math_MySQL Math – 可以在查询中计算相关性吗?
  9. r720换固态硬盘后如何重装系统_联想拯救者 R720 换装 三星 960PRO 512G固态硬盘、重做系统与测试...
  10. 域名转移记录,从百度云转出至阿里云转入
  11. 冬奥探秘:那些隐匿在冬奥中的“绿科技”
  12. 【Bug解决】 -1073740791 (0xC0000409)
  13. 星星之火-6:无线通信必须知道的“信号”与傅里叶信号变换
  14. KDJ指标短线交易技巧(图解)
  15. 跟键盘在一起时间比女朋友还长? 程序员如何选好一块专属键盘?
  16. win10如何关闭自动更新及修改更新时间
  17. ogg在DDL语句同步时出现[Error code [942], ORA-00942的分析
  18. NLPCC-2019 依存句法分析领域移植评测技术分享(封闭情况下双第一)
  19. 09年电子商务格局的个人臆断
  20. js距离米转换为千米_公里和千米的换算(千米和米换算公式)

热门文章

  1. TensorRT深度学习训练和部署图示
  2. 开放神经网络交换(ONNX)工具
  3. 利用反射计芯片进行非接触式液位测量
  4. Android 内容观察者 ContentObserver 类
  5. 关于微信公众号注意事项
  6. Constant expression required
  7. 格式化verilog/systemverilog代码插件
  8. Exp 8 Web基础 20164302 王一帆
  9. java学习--第50天讲到jquery
  10. 【译】为什么要写super(props)