بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

ایجاد قابلیت zoom با touch کردن صفحه

مدیریت گفتگو
unknown 12 سال پیش
آخرین تغییر: 11 سال پیش

با سلام  خدمت دوستان

طبیعتاً شما در اندروید وقتی درون گالری خود سیستم عامل یک عکس را باز می کنید می توانید آن را با touch کردن زوم کنید ، حالا سوال من اینه که چطور میشه چنین قابلیتی را روی Texview ها یا به عبارتی بر روی کل layout های موجود درون  screen انجام داد.

جهت اطلاع : من آموزش ها رو تا قسمت 4 بحث شی گرایی دیدم و در مورد این موضوع مطلبی ندیدم و همینطور این لینک LINK را مطالعه کردم اما در مورد zoom روی انیمیشن ها بحث شده.

با تشکر

نظرات

uncocoder 12 سال پیش
زوم کردن روی یک Layout ممکن نیست. در واقع باید Custom Control اختصاصی خودتون رو بنویسید براش که کار ساده ای نیست. اما صفحات وب قابل زوم شدن هستند و خیل اوقات می تونن جایگزین مناسبی برای اهداف شما باشند ( WebView )
sadeghbarout 12 سال پیش
استاد من یه کد برای زوم کردن روی layout توی جوابای پایین گذاشتم ولی فقط زومه و نمیشه صفحه رو با چپ و راست کردن، جابجا کرد. شما برای جابجا کردنش راهی سراغ ندارید؟

پاسخ‌ها 3

sadeghbarout 12 سال پیش

اگه فقط میخوای روی  textView زوم کنی میتونی از لینک زیر استفاده کنی

زوم روی textView با دو انگشت

من تست کردم خیلی خوب جواب میده

نظرات

unknown 12 سال پیش
ممنونم عالی بود اما این مخصوص یک textview هستش و من در حالت کلی می خواهم روی همه انجام zoom صورت بگیره ، همینم واسه یه دونه textview جواب نداد متاسفانه.
sadeghbarout 12 سال پیش
راستش برای زوم روی layout هم یه کدی دارم ولی یه مشکلی داره (صفحه رو نمیتونی جابجا کنی و فقط زوم میکنه) ولی اگه نیاز داری بگو بذارمش شاید به کارت بیاد
unknown 12 سال پیش
مرسی ، اگه بزاری ممنون می شم ازت
sadeghbarout 12 سال پیش

اینم کد مربوط به زوم روی 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 ه

نظرات

sadeghbarout 12 سال پیش
خواهش میکنم دوست عزیز :)
doost_fu 11 سال پیش
این کد برا زوم کردن عکس هم خوب جواب میده ولی اون قسمت جابجا کردن نداره ! چجوری باید بهش اضافه کرد ؟ البته من از یه کد دیگه برا جابجایی استفاده میکردم که وقتی کنار این کد میزارم دیگه این زوم درست کار نمیکنه !
doost_fu 11 سال پیش

چجوری این کد 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;
}
});


ممنون

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .