public class MyImage extends ImageView implements OnGestureListener {
private GestureDetector mGesture;
private Matrix matrix;
public MyImage(Context context, AttributeSet attrs) {
super(context, attrs);
mGesture = new GestureDetector(context, this);
matrix = new Matrix();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mGesture.onTouchEvent(event);
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
matrix.postTranslate(-distanceX, -distanceY);
RectF rectF = getMatrixRectF();
if (rectF.left <= 0) {
distanceX = rectF.left;
}
if (rectF.top <= 0) {
distanceY = rectF.top;
}
if (rectF.bottom >= getHeight()) {
distanceY = rectF.bottom - getHeight();
}
if(rectF.right>=getWidth()){
distanceX = rectF.right-getWidth();
}
matrix.postTranslate(-distanceX, -distanceY);
setImageMatrix(matrix);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
private RectF getMatrixRectF() {
Matrix translateMatrix = matrix;
RectF rect = new RectF();
Drawable d = getDrawable();
if (null != d) {
rect.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
translateMatrix.mapRect(rect);//这个方法可以获取图片平移后相对于父布局的位置
}
return rect;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.translationdemo.MyImage
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="matrix"
android:layout_centerInParent="true"
android:src="@drawable/code" />
</RelativeLayout>
Android Matrix 平移
最新推荐文章于 2024-06-14 18:00:11 发布