Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin

这篇具有很好参考价值的文章主要介绍了Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin

 文章来源地址https://www.toymoban.com/news/detail-810654.html

初始化状态,ImageView里面只是显示一张fitcenter被缩放的原图,当手指在图片上双击后(记录双击点位置:mCurX,mCurY)画一个红色小圆圈标记双击位置,放大图片,然后把放大后的图的(原mCurX,mCurY)位置移动到区域中心点位置,用大的红色圆圈标记。

 

双击:

Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin,Android ,kotlin,android,kotlin

 

 

放大图片,并把原来图中的双击点移动到区域中心,用大红圆圈标记:

Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin,Android ,kotlin,android,kotlin

 


class MyImageView : AppCompatImageView {
    private var mCurX = 0f
    private var mCurY = 0f

    private val mCirclePaint = Paint()

    private var mSrcBmp: Bitmap? = null
    private var mScaleBmp: Bitmap? = null
    private var testIV: ImageView? = null

    //放大系数。
    private val mScaleFactor = 4f
    private var mGestureDetector: GestureDetector? = null
    private var mIsDoubleTap = false
    private var mCanDraw = false

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {
        mSrcBmp = (drawable as BitmapDrawable).bitmap //mSrcBmp是原始图大小,没有缩放和拉伸的。

        mCirclePaint.style = Paint.Style.STROKE
        mCirclePaint.strokeWidth = 10f
        mCirclePaint.isAntiAlias = true
        mCirclePaint.color = Color.RED

        mGestureDetector = GestureDetector(ctx, object : GestureDetector.SimpleOnGestureListener() {
            override fun onDoubleTap(e: MotionEvent): Boolean {
                mIsDoubleTap = true
                return false
            }
        })
    }

    fun setTestImageView(iv: ImageView?) {
        testIV = iv
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        mCurX = event.x
        mCurY = event.y

        mGestureDetector?.onTouchEvent(event)

        mCanDraw = true

        invalidate()

        return true
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        if (mCanDraw) {
            canvas.drawCircle(mCurX, mCurY, 10f, mCirclePaint)
        }

        if (mIsDoubleTap) {
            myDraw(canvas)
        }
    }

    private fun myDraw(canvas: Canvas) {
        Thread.sleep(1000)

        if (mScaleBmp == null) {
            //创建一次,避免重复创建,提高速度。
            mScaleBmp = Bitmap.createScaledBitmap(
                mSrcBmp!!,
                (this.width * mScaleFactor + 1).toInt(), //注意这里的精度损失,会造成坐标偏移.
                (this.height * mScaleFactor + 1).toInt(),//注意这里的精度损失,会造成坐标偏移.
                true
            )
        }

        val cx = this.width / 2f
        val cy = this.height / 2f

        val matrix = Matrix()
        matrix.setScale(mScaleFactor, mScaleFactor)
        matrix.setTranslate(cx - mCurX * mScaleFactor, cy - mCurY * mScaleFactor)
        canvas.drawBitmap(mScaleBmp!!, matrix, null)

        //中心圆圈
        canvas.drawCircle(cx, cy, 40f, mCirclePaint)
    }
}

 

 

xml里面定义MyImageView,特别的属性设置:

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"

 

 

 

 

 

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin(二)-CSDN博客文章浏览阅读197次。遗留问题,手指在上图滑动过程中,当滑动到一定区域,下面的切图框中已无太有效的图可以“放大”,后续可以填充黑色,表示无效放大。所有的绘制轨迹线,都限定在了绿色的圆角矩形框中,超出区域不予绘制。基础上,限定下面切图的绘制区域,超出绿色区域的轨迹线不再绘制。https://blog.csdn.net/zhangphil/article/details/135601993

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)-CSDN博客文章浏览阅读1.3k次,点赞19次,收藏17次。需要注意的,因为在xml布局里面特别设置了ImageView的高度为wrap_content,手指在屏幕触点的位置是放大镜里面放大图片后准确圆心位置,但是,如果ImageView设置成match_parent,则因为ImageView里面的Bitmap被缩放(此处Bitmap其实小于ImageView,被拉伸了),拉伸后的Bitmap水平方向坐标与ImageView一直重合,但竖直方向,Bitmap坐标与ImageView不一致,会造成一种现象,手指触点放大镜放大后,水平方向是正确的,但竖直方向有偏移量。https://blog.csdn.net/zhangphil/article/details/135172744

Android:GestureDetector.SimpleOnGestureListener,onFling,onScroll,velocityX,Y&distanceX,Y,kotlin_gesturedetector.simpleongesturelistener onscroll-CSDN博客文章浏览阅读184次。Android不用OnScrollListener采用GestureDetector结合OnTouchListener实现ListView下拉/上拉刷新通常Android的ListView的下拉/上拉刷新实现,使用OnScrollListener比较简单,比如如果要实现下拉见顶刷新,思路是在OnScrollListener判断当前ListView的滚动状态,如果滚动停止,则将此时Lis。_gesturedetector.simpleongesturelistener onscrollhttps://blog.csdn.net/zhangphil/article/details/130812011

 

到了这里,关于Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《java 桌面软件开发》swing 以鼠标为中心放大缩小移动图片

    swing 使用Graphic2D 绘制图片,要实现对图片进行缩放和自由拖动。 1.以鼠标所在的位置为中心,滚轮控制缩放 2.缩放后再支持鼠标拖动。 基本原理: 利用scale() 函数。进行缩放。但是要注意的地方是,如果是在 public void paintComponent(Graphics g) 里面通过这个Graphics g 参数获取gra

    2024年02月06日
    浏览(44)
  • vue3 - 实现图片放大缩小和拖曳拖动功能,鼠标移入图像可拖曳移动,鼠标移入图像时滚轮放大缩小功能(vue3网页项目让图片支持鼠标拖动和滚轮放大缩小详细教程,提供完整示例源码,一键复制开箱即用!)

    在 vue3 网站项目中,详细实现图片拖曳拖动、缩小放大功能,鼠标移入图片时可滚轮放大缩小和拖拽图像功能示例, 直接复制全部代码,运行后简单修改即可使用。 以下就是示例图的完整代码,可复制运行。

    2024年02月03日
    浏览(43)
  • Android的UI---ZoomControls放大缩小图片

    这里面,如果将setIsZoomInEnabled()方法设置为false,那么这个放大的按钮就变成了灰色,不能用了,其实这个控件就是两个按钮而已,只是有外观,没有功能,如果你要放大图片或者缩小图片,还是要在监听事件中实现 开始看代码 main.xml文件: ?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"? Linea

    2024年04月12日
    浏览(29)
  • Android 点击图片,放大查看,实现缩放拖动等功能

    实现方法:点击图片时,把图片url传到另一个activity中实现放大拖动, 图片点击事件触发: Intent intent = new Intent(); intent.setClass(mContext, PictureActivity.class); intent.putExtra(“url”,R.drawable.ic_logo); mContext.startActivity(intent); 然后创建一个activity的内容如下: public class PictureActivity extend

    2024年02月11日
    浏览(42)
  • 小程序更多的手势事件(左右滑动、放大缩小、双击、长按)

    微信小程序提供的原生事件有:触摸开始(bindtouchstart)、移动触摸点(bindtouchmove)、触摸结束(bindtouchend)以及长按事件(bindlongtap)和单击事件(bindtap)。通过以上原生事件可设计制作衍生出更多的手势事件; 文章记录小程序中组件 “左右滑动、放大缩小、双击” 事件

    2024年02月09日
    浏览(45)
  • Android 自定义ImageView实现圆角

            实现一个带圆角的imageView,要求自定义view方式实现。         我们可以自定义一个view,继承ImageView,并只需要重写ImageView的onDraw()方法即可。带圆角意味着要把控件的四个顶角做一个裁切。 由于不能影响imageview主体的正常绘制, 想到了可以在执行super.onDraw()方

    2024年02月01日
    浏览(41)
  • 使用opencv计算图片上任意一点到图片中心点距离为半径绘制圆形,计算FOV

    一、计算公式 图片坐标:Point(x,y) 半径 :r = ( x − i m a g e . c o l s / 2 ) 2 + ( y − i m a g e . r o w s / 2 ) 2 sqrt {(x - image.cols/2)^2 + (y - image.rows/2)^2} ( x − ima g e . co l s /2 ) 2 + ( y − ima g e . ro w s /2 ) 2 ​ 二、以 R R R 为半径在图像上绘制圆形,如下图所示: 三、实现代码

    2024年01月16日
    浏览(32)
  • Android ImageView 四个角自定义角度,以及角度的变换

    在正常开发过程中,我们经常会发现一些图片有各种各样的显示,有圆角、直角、圆形、不规则图形等?比较常见的是圆形,还有圆角。今天我们将讲述圆角、四个角不同度数以及通过圆角巧妙变成圆形 1.如果大家不熟悉圆形或者path的以及canvas.clipPath,可以参考我的一篇文章

    2023年04月11日
    浏览(32)
  • 记录--移动端的双击事件好不好用?

    2023年了,我不允许还有人不会自己实现移动端的双击事件。 过来,看这里,不足 50 行的代码实现的双击事件。 听笔者娓娓道来。 js原生有个 dblclick 双击事件,但是几乎不支持移动端。  而且,该 dblclick 事件在pc端鼠标双击时,会触发两次 click 与一次 dblclick 。 我们期望可

    2024年02月10日
    浏览(32)
  • 一起Talk Android吧(第五百四十回:ImageView的缩放)

    各位看官们大家好,上一回中咱们说的例子是\\\"RxJava中的总结\\\",本章回中介绍的例子是\\\"I mageView的缩放 \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 通常情况下ImageView组件主要用来显示图片,因此需要使用图片当作显示内容,这个可以通过 ImageView 的src属性来设置被显示的

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包