آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

حرکت کردن عکس با هربار کلیک شدن بدون استفاده از انیمیشن (حل شد)

MeY3am  11 سال پیش  11 سال پیش
+1 0

مشکل حل شد !


سلام دوستان؛

همانطور که از عنوان سئوال مشخصه میخوام با هربار کلیک شدن باتن، عکس به سمت چپ - راست - بالا - پایین حرکت کنه مثلأ 10 واحد، البته "بدون استفاده از انیمیشن" چون که انیمیشن برای کلیک مجدد، عکس از صفر دوباره شروع به حرکت میکنه و من اینو نمیخوام، میخوام با هربار کلیک شدن عکس به حرکت خودش ادامه بده یعنی حرکت قبلی عکس حفظ بشه یا در متغیری ذخیره بشه!

ممنون میشم راهنمایی بفرمایید !

0 0
دوستان عزیز ممنون میشم راهنمایی کنید، مشکل حل نشده ! (11 سال پیش)
+1 0
میشه marginLeft عکس رو کم و زیاد کنی. برای اینکار باید از LayoutParams استفاده کنید. (11 سال پیش)
+2 0
استفاده از مارجین کار اشتباهیه، دلیلش هم Process بالا و ایجاد Lag هست، اگر عکس شما کمی بزرگتر باشه به طور کامل Lag قابل تشخیص خواهد بود، روش درست انجام اینکار استفاده از ObjectAnimator هست. همونجوری که Location فعلی رو ذخیره میکنید و بهش میگید از اون Location جای خودت رو عوض کن، در ObjectAnimator هم به همین صورت میتونید این کار رو انجام بدید. (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  11 سال پیش
+4 0

یه RelativeLayout باز میکنید و توش View رو قرار میدید بعد هروقت کلیک شد متد زیر رو با مقادیر دلخواه اجرا کنید :

 public static void setMargins (View view, int left, int top, int right, int bottom) {
ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
param.setMargins(left, top, right, bottom);
view.requestLayout();
}

 

0 0
واقعأ ممنون بابت کد محمدحسین جان، فقط من میخوام که با هربار کلیک شدن حرکت کنه یعنی حرکت قبلیش حفظ بشه، و مجددأ که کلیک شد همون مسیر رو حرکت کنه، با این کد شما فقط یه بار حرکت میکنه و برای بار دوم که کلیک صورت میگیره هیچگونه عکس العملی از خودش نشون نمیده، ممنون میشم در این مورد هم راهنمایی کنید ! (11 سال پیش)
0 0
طبیعتا باید کار کنه شما مقدار param رو ببنید چیه باید موقعیت فعلی رو بده و بر اساس اون مسیر رو تغییر بدید . (11 سال پیش)
0 0
محمدحسین @ پاسخ بعدی رو بررسی کنید ! (11 سال پیش)
پاسخ به سوال 
MeY3am  11 سال پیش
+2 0

محمدحسین @ کد شما رو به اینصورت قرار دادم

 findViewById(R.id.btnLeft).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {


                    img.setScaleType(ScaleType.MATRIX);

                    setMargins(img, 10, 0, 0, 0);
            }
        });
}


public static void setMargins(View view, int left, int top, int right, int bottom) { ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); param.setMargins(left, top, right, bottom); view.requestLayout(); }

 که img همان ImageView هست که باید به سمت چپ حرکت کنه؛

ولی با این کد شما یه بار حرکت میکنه و در صورت کلیک شدن مجدد btnLeft عکس هیچگونه عکس العملی نشون نمیده !

+1 0
لینک (11 سال پیش)
+1 0
مشکل اینه که شما با هر بار کلیک، برای عکستون Margin رو 10 میدید ، بعدش که دوباره روی دکمه کلیک میکنید، Margin رو باز 10 میدید (که مشخصا با کلیک اول 10 شده بود). اما راه حل : راه حل اینه که یه متغییر عددی تعریف کنی و اون رو به جای مارجین قرار بدی، و بعد از هر بار کلیک مقدارش مثلا 10 تا اضافه بشه. (11 سال پیش)
+2 0
میتونید وضعیت margin رو بررسی کنید و بعد بگید هر چی هست + مقدار جدید نیاز به تعریف متغیر نیست (11 سال پیش)
پاسخ به سوال 
MeY3am  11 سال پیش
+1 0

بنا به راهنمایی دوستان عزیز کد رو با این صورت تغییر دادم ولی بازم فقط یه بار به سمت راست حرکت میکنه !؟

 findViewById(R.id.btnLeft).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                    
int left = 10; img.setScaleType(ScaleType.MATRIX); setMargins(img, left , 0, 0, 0);
if (left == 10) { left += 10; } } });
}


public static void setMargins(View view, int left, int top, int right, int bottom) { ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); param.setMargins(left, top, right, bottom); view.requestLayout(); }
0 0
مهندس شما داری مقدار left رو اون بالا میدی 10 بعد پایین تغییر میدی میشه 20 بعد موقع کلیک مجدد میشه 10 دیگه :) (11 سال پیش)
0 0
شرط رو قبل از setMargins هم گذاشتم ولی باز بی فایده بود :| left هم پلاس کردم بازهم فایده نداشت، زحمت کدشو بکشید ممنون میشم :) (11 سال پیش)
0 0
ممنون میشم راهنمایی کنید ، مشکل هنوز حـل نـشده ! (11 سال پیش)
+1 0
شما باید متغیرت رو ببری بیرون از onclick تعریف کنی خارج از لیسنر مربوطه به کلیک شدن (11 سال پیش)
0 0
داخل یه switch case قرارش دادم و براش شرط گذاشتم اینجوری دستم بازتره که تاهرجا که بخوام حرکت کنه، راه حل بهتری مدنظرتون هست؟ (11 سال پیش)
0 0
من راه حل ساده رو گفتم نمیدونم شما چیکار میکنی :| میتونی موقعیت اون ویو رو بگیری که مارجین هاش چین + مارجین جدید کنی (11 سال پیش)
0 0
موقعیت هاشو با switch و 26تا case گرفتم که هر 10واحد 10واحد دیگه بهش اضافه میشه ولی 26تا case به نظر منطقی نمیاد :| (11 سال پیش)
0 0
روشی که مدنظر شما هست برای گرفتن موقعیت ویو چی هست؟ (11 سال پیش)
پاسخ به سوال 
کاشی زاده  11 سال پیش
+6 0

روشش اینه  :

 public void setMargins(View view, int left, int top, int right, int bottom) {
ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
left += param.leftMargin;
top += param.topMargin;
right += param.rightMargin;
bottom += param.bottomMargin;
param.setMargins(left, top, right, bottom);
view.requestLayout();
}

اینم نتیجه :

.

 

0 0
ممنون از راهنمایی عالیتون محمدحسین جان عالی بود، شرط ها رو هم تو همین متد اعمال کردم، مرسی مشکلم حل شد ! (11 سال پیش)

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