در این ساعت در تجاری اپ سورس کد چرخش و بزرگنمایی تصویر در اندروید (اندروید استودیو) با جاوا را دراختیار شما عزیزان قرار میدهیم که در ادامه میتونید به صورت رایگان از سورس استفاده و یا آن را درکانال تلگرام ما دانلود کنید.
این پروژه تنها نیاز به یک فایل xml و java دارد که فایل xml به صورت زیر است
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tejariapp.rotatezoomsourcecode.MainActivity"> <ImageView android:id="@+id/im_move_zoom_rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> </RelativeLayout>
package com.tejariapp.rotatezoomsourcecode; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.RelativeLayout; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity { ImageView im_move_zoom_rotate; float scalediff; private static final int NONE = 0; private static final int DRAG = 1; private static final int ZOOM = 2; private int mode = NONE; private float oldDist = 1f; private float d = 0f; private float newRot = 0f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); im_move_zoom_rotate = (ImageView) findViewById(R.id.im_move_zoom_rotate); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(250, 250); layoutParams.leftMargin = 50; layoutParams.topMargin = 50; layoutParams.bottomMargin =- 250; layoutParams.rightMargin =- 250; im_move_zoom_rotate.setLayoutParams(layoutParams); im_move_zoom_rotate.setOnTouchListener(new View.OnTouchListener() { RelativeLayout.LayoutParams parms; int startwidth; int startheight; float dx = 0, dy = 0, x = 0, y = 0; float angle = 0; @Override public boolean onTouch(View v, MotionEvent event) { final ImageView view = (ImageView) v; ((BitmapDrawable) view.getDrawable()).setAntiAlias(true); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: parms = (RelativeLayout.LayoutParams) view.getLayoutParams(); startwidth = parms.width; startheight = parms.height; dx = event.getRawX() - parms.leftMargin; dy = event.getRawY() - parms.topMargin; mode = DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); if (oldDist > 10f) { mode = ZOOM; } d = rotation(event); break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { x = event.getRawX(); y = event.getRawY(); parms.leftMargin = (int) (x - dx); parms.topMargin = (int) (y - dy); parms.rightMargin = 0; parms.bottomMargin = 0; parms.rightMargin = parms.leftMargin + (5 * parms.width); parms.bottomMargin = parms.topMargin + (10 * parms.height); view.setLayoutParams(parms); } else if (mode == ZOOM) { if (event.getPointerCount() == 2) { newRot = rotation(event); float r = newRot - d; angle = r; x = event.getRawX(); y = event.getRawY(); float newDist = spacing(event); if (newDist > 10f) { float scale = newDist / oldDist * view.getScaleX(); if (scale > 0.6) { scalediff = scale; view.setScaleX(scale); view.setScaleY(scale); } } view.animate().rotationBy(angle).setDuration(0).setInterpolator(new LinearInterpolator()).start(); x = event.getRawX(); y = event.getRawY(); parms.leftMargin = (int) ((x - dx) + scalediff); parms.topMargin = (int) ((y - dy) + scalediff); parms.rightMargin = 0; parms.bottomMargin = 0; parms.rightMargin = parms.leftMargin + (5 * parms.width); parms.bottomMargin = parms.topMargin + (10 * parms.height); view.setLayoutParams(parms); } } break; } return true; } }); } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return (float) Math.sqrt(x * x + y * y); } private float rotation(MotionEvent event) { double delta_x = (event.getX(0) - event.getX(1)); double delta_y = (event.getY(0) - event.getY(1)); double radians = Math.atan2(delta_y, delta_x); return (float) Math.toDegrees(radians); } }
حالا به راحتی میتونید ImageView رو حرکت بدید بچرخانید و حتی سایز آنرا تغییر دهید.
برای دریافت سورس کد میتوانید به کانال تلگرام ما بپیوندید.
موفق باشید 🙂