好吧也许我在这里遗漏了一些东西,但我被困了好几个小时.我创建了一个应用程序,用户在图片上绘制尺寸线.现在我想绘制一些选择点,表明该行已被选中.这些点是一个特定的位图,必须位于该行的末尾(箭头后)并根据箭头旋转.我创建了一个扩展View的类DrawSelectionPoint,我可以使用以下内容旋转位图:
selectionPoint = BitmapFactory.decodeResource(context.getResources(),R.drawable.selectionpoint);
Matrix matrix = new Matrix();
        matrix.postRotate((float)Math.todegrees(angle));        
canvas.drawBitmap(selectionPoint,matrix,null);

(其中angle是直线的角度)这样我的位图按照我想要的方式旋转,但是它绘制在点0,0(屏幕的左上角).

如果我使用类似的东西

canvas.save();

canvas.rotate();

canvas.drawBitmap(selectionPoint,x,y,null);

canvas.restore();

然后我发现在我想要的确切位置绘制位图太难了(因为我在旋转的画布上绘制,然后我将其旋转回来).我尝试了一些欧几里德旋转变换,但我没有运气.

有没有办法应用矩阵旋转,并给出我需要绘制位图的点?先感谢您!

解决方法

假设您要绘制位图中心位于(px,py)画布坐标的位图.有一个成员变量
Matrix matrix = new Matrix();

并在你的onDraw:

matrix.reset();
matrix.postTranslate(-bitmap.getWidth() / 2,-bitmap.getHeight() / 2); // Centers image
matrix.postRotate(angle);
matrix.postTranslate(px,py);
canvas.drawBitmap(bitmap,null);

Android – 绘制将位图旋转到画布上的特定位置的更多相关文章

  1. Canvas系列之滤镜效果

    Canvas 真的是一个神奇的东西,不仅能够绘制各种图形、文本和位图,还能够对位图进行复杂的像素运算和处理。因此像滤镜这些东西,其实 Canvas 也可以来实现。本文介绍了Canvas滤镜的实现,感兴趣的可以参考了解下

  2. 深入了解canvas在移动端绘制模糊的问题解决

    这篇文章主要介绍了深入了解canvas在移动端绘制模糊的问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. 【HTML5】3D模型--百行代码实现旋转立体魔方实例

    本篇文章主要介绍【HTML5】3D模型--百行代码实现旋转立体魔方实例,具有一定的参考价值,有需要的可以了解一下。

  4. 在iOS上,缓存绘制的屏幕图像并显示它的最快方法是什么?

    我没有让drawRect每次重绘数千个点,我认为有几种方法可以“在屏幕上缓存图像”和任何其他绘图,我们将添加到该图像,并在drawRect时显示该图像:>使用BitmapContext并绘制到位图,并在drawRect中绘制此位图.>使用CGLayer并在drawRect中绘制CGLayer,这可能比方法1快,因为此图像缓存在图形卡中(并且它不会计入iOS上“内存警告”的RAM使用情况?

  5. ios – Autolayout旋转轮

    我正在尝试使用CGAffineTransformRotate旋转UIImageView约束,但是视图在旋转时抖动.如果我使用CATransform3DRotate旋转它的图层,则不会发生这种情况,但只要我编辑约束(更改常量),旋转的图像就会跳开.有谁有想法如何解决这个问题?这是跳过的旋转图像的屏幕截图解决方法自动布局作用于UIView的框架.框架根据视图的中心,边界和变换属性计算.默认情况下,vi

  6. ios – 如何计算swift中两条线条图像的相似度

    我们需要比较两个手绘图像.这些图像是在spritekit上绘制的.我们需要看看这些图片是否大致匹配.例如,如果有人画一个微笑图片,我们需要检查重绘的微笑图片是否看起来像是第一个绘制的微笑图片或者不需要知道这两个图像是否相似,并且计算准确性百分比他们是多么相似.请提出一些解决方案.谢谢提前.解决方法您可以尝试将每个路径绘制成位图并进行比较.这是一个fewsuggestions做比较.如果没有任何其他

  7. ios – 在没有框架改变的情况下旋转UIView

    我有一个UIView,它的高度和宽度在旋转到90度时互换.现在,当我尝试增加高度或宽度时,我看起来异常.如何更改旋转的UIView的高度?解决方法Apple的文档声明,当视图的转换不是标识转换时,视图的frame属性将变为未定义.旋转视图会更改视图的变换.现在,为什么这会使框架无效?

  8. swift之附属脚本

    例如,Swift的字典实现了通过附属脚本来对其实例中存放的值进行存取操作。为了方便进行断言,Matrix包含了一个名为indexIsValid的成员方法,用来确认入参的row或column值是否会造成数组越界:断言在附属脚本越界时触发:

  9. Swift Core Graphics教程之Gradients 与 Context

    你使用过UIBezierPath的就是在UIKit层中对CoreGraphics层中CGPath的封装。你可以看到CoreGraphics的对象和方法都是CG开头的,非常容易辨认。视图将包含一个Graph和CounterViews,确定他们是视图控制器的主视图的子视图,并且Graph在CounterViews之上。打开ViewController.swift,为Container和GraphViews添加outloets:@IBOutletweakvarcontainerView:UIView!最后,为了

  10. swift教程-使用UIGestureRecognizer

    swift教程-使用UIGestureRecognizer更新提示:这篇教程已经由CarolineBegbie为适配IOS8及Swift做了更新。假如你想要在你的应用中检测手势,例如点击,缩放,平移,或者旋转,用Swift和内建的UIGestureRecognizer类实现是非常容易的。UIGestureRecognizer概述在开始之前,先看一份如何使用UIGestureRecognizers以及为什么它们如此得心应手。在IOS3.0,苹果公司就开始拯救UIGestureRecognizer类!使用UI

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部