ایجاد قابلیت zoom با touch کردن صفحه
با سلام خدمت دوستان
طبیعتاً شما در اندروید وقتی درون گالری خود سیستم عامل یک عکس را باز می کنید می توانید آن را با touch کردن زوم کنید ، حالا سوال من اینه که چطور میشه چنین قابلیتی را روی Texview ها یا به عبارتی بر روی کل layout های موجود درون screen انجام داد.
جهت اطلاع : من آموزش ها رو تا قسمت 4 بحث شی گرایی دیدم و در مورد این موضوع مطلبی ندیدم و همینطور این لینک LINK را مطالعه کردم اما در مورد zoom روی انیمیشن ها بحث شده.
با تشکر
اگه فقط میخوای روی textView زوم کنی میتونی از لینک زیر استفاده کنی
من تست کردم خیلی خوب جواب میده
اینم کد مربوط به زوم روی activity با 2 انگشت . (البته فقط زوم میکنه و برای چپ و راست کردنش باید یه کدهایی اضاف کنی ولی خب چون خودت خواستی میذارمش)
public class startupActivity extends Activity {
private float mScale = 1f;
private ScaleGestureDetector mScaleDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
final LinearLayout lnr1 = (LinearLayout) findViewById(R.id.linear1);
mScaleDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.SimpleOnScaleGestureListener()
{
@Override
public boolean onScale(ScaleGestureDetector detector)
{
float scale = 1 - detector.getScaleFactor();
float prevScale = mScale;
mScale += scale;
if (mScale < 0.1f) // Minimum scale condition:
mScale = 0.1f;
if (mScale > 10f) // Maximum scale condition:
mScale = 10f;
ScaleAnimation scaleAnimati ScaleAnimation(1f / prevScale, 1f / mScale, 1f / prevScale, 1f / mScale, detector.getFocusX(), detector.getFocusY());
scaleAnimation.setDuration(0);
scaleAnimation.setFillAfter(true);
lnr1.startAnimation(scaleAnimation);
return true;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
mScaleDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
فقط اون linear1 همون لایه اصلی صفحه main ه
چجوری این کد Drag کردن رو میشه در کنار کد بالا استفاده کرد که مشکلی پیش نیاد ؟
private ImageView image;
private int x_Delta;
private int y_Delta;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.imageOne);
image.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
x_Delta = X - lParams.leftMargin;
y_Delta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
layoutParams.leftMargin = X - x_Delta;
layoutParams.topMargin = Y - y_Delta;
layoutParams.rightMargin = -400;
layoutParams.bottomMargin = -400;
v.setLayoutParams(layoutParams);
break;
}
image.invalidate();
return true;
}
});
ممنون
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .