View 隨著手指的移動而放大和旋轉

2021-09-30 16:21:46 字數 1142 閱讀 4059

一、效果

如上圖,手指頭放在mexpenditemview,當手指頭移動的時候,mtouchimageview隨著mexpenditemview的移動而縮放和旋轉

二、關鍵原始碼

private void initattribute() 

private void touchexpandview(view v, motionevent event)

} private float getdistancex(motionevent event)

private float getdistancey(motionevent event)

private void setscaleandrotate(motionevent event)

入口是touchexpandview, 需要監聽ontouchlistener,然後在ontouch執行touchexpandview。

三、原理

1、小圖示mexpenditemview的移動

簡單的數學知識:

mcorrectionx = event.getrawx() - v.getx();

這個mcorrectionx就是touch點和mtouchimageview左上角的x座標的距離。這個值在移動的過程中是不變的。

所以,移動的時候,v的x座標就是:

v.getx()  = event.getrawx() - mcorrectionx.

就是上面**中的函式getdistancex

2、mtouchimageview的縮放和旋轉

很重要的一點,縮放和旋轉都是相對於原始大小和角度的。座標是相對於mtouchimageview的中心點。

所以,先記錄原始大小和角度:initattribute()

縮放的倍數,就是縮放後的半徑除以原始大小的半徑。半徑的演算法就是勾股定理。

旋轉的角度,就是上圖的a2 - a1. 

a2和a1的演算法就是tan a = y / x.

ViewPager隨著手指聯動,且字型隨之變色

在此次專案中,總結了一下在viewpager fragment的情況下,手指滑動viewpager,使得指標一起聯動,並且字型隨之變色的效果,參考了鴻洋大神的兩篇文章和其他開源 此次做了比較完整的處理,以後如果有需要的話,可以直接拿來用。具體的一些 塊貼上來僅供參考 自定義的scrolltabvie...

android 自己定義元件隨著手指自己主動畫圓

首先自己定義乙個view子類 package com.example.androidtest0.myview import android.content.context import android.graphics.canvas import android.graphics.color imp...

android自定義view之畫圓隨著手指移動

以前在部落格總想找到乙個簡單適合初步接觸自定義 但是總是被那些部落格大佬們玄幻的 帶懵,可能層次不夠,所以我慢慢深入,下面的 是圓隨著手指滑動而滑動 public class drawview extends view public drawview context context,nullable...