如图,
不知道图片中的每张图是不是ImageView,是的话canvas.rotate()、Matrix.rotate()都可以实现图片旋转,但是Android中View的可绘图区域是一个垂直的矩形,View中的图片旋转之后会一部分图像就会不可见,如图,增大view的显示区域倒也可以把图像完整显示,但是View的四角就会留下一些没有绘制的空白区域,点击这些区域被这张图片覆盖的其他图片就不能获得点击事件。美图秀秀里被那些空白的区域覆盖的图片是可以获得点击事件的,并且可以拖动;
小弟实在想不明白是怎么实现的,忘高手告知!!小弟不胜感激!!!

解决方案 »

  1.   

    把这个应用安装到模拟器上,然后用Hirearchy viewer 看看
      

  2.   

    从android本身的imageView来说,他一直都是一个矩形区域,就算图片是斜的,他也是一个包裹这个图片的矩形区域
    我认为要实现这个效果,把图片旋转之后用一个更大的矩形imageView去包裹他但是你说在覆盖区域是有点击事件的,那就只有整个View都由自己重写,自己处理onDraw和touch消息来控制刷新了
    其他的就想不到了
      

  3.   


    谢谢,反编译秀秀的代码大致看了下,如兄台所说,秀秀就是重写的整个View,自己处理的onDraw和touch消息来控制刷新。
    不过感觉实现起来会很有难度。
    1.canvas可以draw多个Bitmap吗?
    2.touchEvent里要判断手指点击的坐标是否被倾斜的图片包裹,这个怎么判断?
    期待兄台的解答?
      

  4.   

    1可以画多个Bitmap
    2可以用Matrix matrix = new Matrix();matrix.setRotate(90);做旋转放大平移操作,canvas本身也有旋转的方法rotate。
      

  5.   


    1、 canvas的draw就是一层一层覆盖上去的,后面的覆盖前面的,可以draw多个的2、 因为没有控件用了,图片的位置什么的肯定都是自己管理,自己算坐标,用一个多边形代替。然后把位置存储起来。所以也就只有判断点击点在不在多边形内。涉及的算法我只知道最简单的。
    前面还说到那个拖动,就需要随时动态刷新变换什么的了,很废内存所以那个判断算法肯定不能太差
    不过这都是估计,具体能承受到什么样子应该看机器
      

  6.   

    求教....你说的增大view显示区域, 是指重写onmeasure方法吗?