Android 图片与屏幕坐标点

606人阅读 评论(3) 收藏 举报
分类:

计算获取的ImageView图片显示时的实际大小(ps:这里会用到可见ImageView的宽高主要是因为我需要根据可见ImageView的宽高来设置其他控件的宽高,还有就是后面关于图像与屏幕坐标点的转换会需要用到)

 private void setLayoutParams() {
        int[] size = ImageUtils.getRealImgShowSize(mImageView);
        mRealImgShowWidth = size[0];
        mRealImgShowHeight = size[1];
        ViewGroup.LayoutParams params = mImageView.getLayoutParams();
        params.height = mRealImgShowHeight;
        params.width = mRealImgShowWidth;
        mImageView.setLayoutParams(params);       
    }
   //0:宽 1:高
  public static int[] getRealImgShowSize(ImageView imageview){
        Rect rect=imageview.getDrawable().getBounds();
        //可见image的宽高
        int scaledHeight = rect.height();
        int scaledWidth = rect.width();
        //获得ImageView中Image的变换矩阵
        Matrix matrix= imageview.getImageMatrix();
        float[] values = new float[10];
        matrix.getValues(values);
        //Image在绘制过程中的变换矩阵,从中获得x和y方向的缩放系数
        float sx = values[0];
        float sy = values[4];
        //计算Image在屏幕上实际绘制的宽高
       int realImgShowWidth =(int) (scaledWidth * sx);
       int realImgShowHeight =(int)( scaledHeight * sy);
       int[] size=new int[]{realImgShowWidth,realImgShowHeight};
        return size;
    }
//屏幕坐标转图片坐标
    private List<Point> getBitmapPoints(Bitmap original, Map<Integer, PointF> points) {
        List<Point> srccorners = new ArrayList<>();

        float xRatio = (float) original.getWidth() /mRealImgShowWidth;//mRealImgShowWidth=ImageView.getWidth()
        float yRatio = (float) original.getHeight() / mRealImgShowHeight;

        float x1 = (points.get(0).x) * xRatio;
        float x2 = (points.get(1).x) * xRatio;
        float x3 = (points.get(2).x) * xRatio;
        float x4 = (points.get(3).x) * xRatio;
        float y1 = (points.get(0).y) * yRatio;
        float y2 = (points.get(1).y) * yRatio;
        float y3 = (points.get(2).y) * yRatio;
        float y4 = (points.get(3).y) * yRatio;
        srccorners.add(new Point(x1, y1));
        srccorners.add(new Point(x2, y2));
        srccorners.add(new Point(x3, y3));
        srccorners.add(new Point(x4, y4));
        return srccorners;
    }
    //图片坐标转屏幕坐标
    private  Map<Integer,PointF> getScreenPoints(Bitmap original,Map<Integer, PointF> points){
        float xRatio = (float) original.getWidth() / mRealImgShowWidth;
        float yRatio = (float) original.getHeight() / mRealImgShowHeight;
       Map<Integer,PointF> screenPoints=new HashMap<>();
        float x1 = points.get(0).x/xRatio;
        float x2 = points.get(1).x / xRatio;
        float x3 = points.get(2).x / xRatio;
        float x4 =points.get(3).x / xRatio;
        float y1 =  points.get(0).y / yRatio;
        float y2 =  points.get(1).y/ yRatio;
        float y3 = points.get(2).y/ yRatio;
        float y4 =  points.get(3).y / yRatio;
        screenPoints.put(0,new PointF(x1,y1));
        screenPoints.put(1,new PointF(x2,y2));
        screenPoints.put(2,new PointF(x3,y3));
        screenPoints.put(3,new PointF(x4,y4));
        return screenPoints;
    }
查看评论

Android应用坐标系统全面详解

很多人可能不屑一顾Android的坐标系,但是如果你想彻底学会自定义控件,我想说了解Android各种坐标系及一些API的坐标含义绝对算一个小而不可忽视的技能;所谓Android自定义View那几大主...
  • yanbober
  • yanbober
  • 2016-01-05 20:20:28
  • 29137

android 屏幕坐标总结

android 屏幕坐标好多个,有时候傻傻分不清楚,经常记错,然后只能一个个试。尴尬~~ 把它们总结下来,以备不时之需嘿嘿。 一、视图坐标 最外面一层是屏幕,左上角是坐标原点,向右向下是x、...
  • y1962475006
  • y1962475006
  • 2017-03-14 00:16:45
  • 872

android坐标

说来说去都不如 画图示意 简单易懂啊!!!真是的! 来吧~~先上张图~~! (一)首先明确一下 android 中的坐标系统 :      屏幕的左上角是坐标系统原点(0,0)      ...
  • LVXIANGAN
  • LVXIANGAN
  • 2014-02-26 11:44:54
  • 64265

Android手机屏幕坐标定义

通常在做项目的时候我们会写一些动画,比如activity切换的动画,这个时候常见的办法就是在res目录下新建个anim文件,里面写一些xml动画文件。我们在写这些文件时通常会考虑需求,比如activi...
  • qq_22660223
  • qq_22660223
  • 2017-05-25 18:30:46
  • 1277

手机屏幕坐标获取方法

1.手机自带的隐私--开发者工具--显示指针(一般安卓4.0以上的都有这个选项,以下的就不确定了,我的测试机2.0版本的就找不到) 2.monkeyrunner录制时获取,打开monkeyrecord...
  • u011649536
  • u011649536
  • 2016-11-30 16:30:13
  • 2584

手机屏幕坐标

整个坐标系是以手机屏幕左上角为原点(0,0),如果在屏幕没有滑动之前,这一理解肯定是ok的,但在滑屏之后,就会产生很多歧义和混淆,原因在于使用过程当中,很多方法的参数并非是参照屏幕,而是相对于父视图,...
  • zhangweixing0
  • zhangweixing0
  • 2013-06-09 14:03:35
  • 17742

Android 在图片的指定位置添加标记

有时候,我们需要在图片的固定位置添加标签、标记物等,比如有这样的场景:假设有一个家居图片,图片里,有各样的家居用品: 桌子,毛巾,花瓶等等, 我们在指定的商品处添加标记,方便用户直接看到商品。...
  • zuiwuyuan
  • zuiwuyuan
  • 2016-08-03 21:42:47
  • 9902

Android得到控件在屏幕中的坐标

getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 getLocatio...
  • SJF0115
  • SJF0115
  • 2012-02-29 15:42:15
  • 104659

android 自定义坐标曲线图

android自定义坐标曲线图
  • chen_zhang_yu
  • chen_zhang_yu
  • 2016-03-11 22:49:14
  • 7538

Android 高德地图 自己位置的显示与点地图上任意一点的坐标

一些简单的基本配置在这里就不做介绍 效果图片如下: 1. 中间的蓝点是自己的位置 2.黄色的图标是点击的位置 3.上面TextView显示的是黄色图片的坐标 下面是代码: Ma...
  • Dr_abandon
  • Dr_abandon
  • 2017-09-14 14:47:43
  • 2762
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 38万+
    积分: 6687
    排名: 4414
    博客专栏
    最新评论