平面设计教程网站有哪些,郑州建筑工程有限公司,夫妻做网站,深圳品牌网站Android双击图片放大移动图中双击点到ImageView区域中心#xff0c;Kotlin 初始化状态#xff0c;ImageView里面只是显示一张fitcenter被缩放的原图#xff0c;当手指在图片上双击后#xff08;记录双击点位置#xff1a;mCurX#xff0c;mCurY#xff09;画一个红色小圆…Android双击图片放大移动图中双击点到ImageView区域中心Kotlin 初始化状态ImageView里面只是显示一张fitcenter被缩放的原图当手指在图片上双击后记录双击点位置mCurXmCurY画一个红色小圆圈标记双击位置放大图片然后把放大后的图的原mCurX,mCurY位置移动到区域中心点位置用大的红色圆圈标记。 双击 放大图片并把原来图中的双击点移动到区域中心用大红圆圈标记 class MyImageView : AppCompatImageView {private var mCurX 0fprivate var mCurY 0fprivate val mCirclePaint Paint()private var mSrcBmp: Bitmap? nullprivate var mScaleBmp: Bitmap? nullprivate var testIV: ImageView? null//放大系数。private val mScaleFactor 4fprivate var mGestureDetector: GestureDetector? nullprivate var mIsDoubleTap falseprivate var mCanDraw falseconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {mSrcBmp (drawable as BitmapDrawable).bitmap //mSrcBmp是原始图大小没有缩放和拉伸的。mCirclePaint.style Paint.Style.STROKEmCirclePaint.strokeWidth 10fmCirclePaint.isAntiAlias truemCirclePaint.color Color.REDmGestureDetector GestureDetector(ctx, object : GestureDetector.SimpleOnGestureListener() {override fun onDoubleTap(e: MotionEvent): Boolean {mIsDoubleTap truereturn false}})}fun setTestImageView(iv: ImageView?) {testIV iv}override fun onTouchEvent(event: MotionEvent): Boolean {mCurX event.xmCurY event.ymGestureDetector?.onTouchEvent(event)mCanDraw trueinvalidate()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 / 2fval cy this.height / 2fval 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_widthmatch_parentandroid:layout_heightwrap_contentandroid:adjustViewBoundstrueandroid:scaleTypefitCenter Android Matrix绘制PaintDrawable设置BitmapShader手指触点为圆心scale放大原图Kotlin二-CSDN博客文章浏览阅读197次。遗留问题手指在上图滑动过程中当滑动到一定区域下面的切图框中已无太有效的图可以“放大”后续可以填充黑色表示无效放大。所有的绘制轨迹线都限定在了绿色的圆角矩形框中超出区域不予绘制。基础上限定下面切图的绘制区域超出绿色区域的轨迹线不再绘制。https://blog.csdn.net/zhangphil/article/details/135601993
Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜Kotlin1-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,YdistanceX,Ykotlin_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