رفتن به مطلب
  • 0

مشکل در کلیک شدن اشیایی که با کتابخانه انیمیشن چرخیده اند !


fun_code

سوال

سلام دوستان

شاید با این مشکل روبرو شده باشید و از خیرش گذشته باشید. اما اگر حل بشه خیلی کاربردیه.

حتما تا الان یک عکس رو با دستورات زیر و با استفاده از کتابخانه انیمیشن پلاس Rotate کردین ...

Private img As ImageView
img.Initialize("img")
img.Bitmap=LoadBitmap(File.DirAssets,"1.png")
Activity.AddView(img,300,350,200,200)
anim.InitializeRotate("anim",0,180)
anim.Duration=1
anim.PersistAfter=True
anim.Start(img)

با این کار عکس 180 درجه میچرخه یعنی طبق شکل زیر از مکان شماره 1 به مکان شماره 2 تغییر مکان میده و به همون شکل باقی میمونه...

 

draw.jpg

 

اما مشکل اینجاست که در ظاهر مکانش جابجا شده اما در حقیقت مکان عکس هیچ تغییری نکرده !

یعنی اگر جایی که عکس اونجا بوده (مکان شماره 1)رو کلیک کنید ، میبینید رویداد کلیک رخ میده !

و همچنین اگر روی مکانی از عکس که با چرخش به اونجا رفته (مکان شماره 2) کلیک کنید میبینید رویداد کلیک رخ نمیده !

(یعنی روی عکس کلیک میکنیا ، انگار کلیک نکردی... چه نقص بزرگی در این کتابخانه وجود داره !)

 

از دوستان با تجربه ، کسی برای حل این مشکل ایده ای داره ؟

از توجه شما متشکرم و پیشاپیش ممنونم از راهنماییتون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

@

سلام

ممنون از راهنمایی شما

اما باز هم مشکل داشت.

عکسش رو گذاشتم که متوجه صحبتم بشین.

1.png

در عکس بالا اونی که قرمز رنگه پنلی هست که با تابع شما ساخته شده.

هم مکانش اشتباه هست و هم اینطور که پیداست پنل فقط بصورت عمودی یا افقی ساخته میشه و زاویه ای نداره.

 

با فرض اینکه این مشکل هم حل بشه ،

مشکل بزرگتر اینجاست که اگر چند عدد کارت با کمی فاصله و با کمی زاویه چرخش روی هم باشن ، رویداد کلیک هر کارت بدرستی کار نمیکنه. چرا که رویداد کلیک محدود به به پنلی است که افقی یا عمودی تعریف شده...

گفتنش سخته...

در عکس زیر بهتر مشخصه که منظورم چیه... در عکس زیر 4 عدد کارت با کمی فاصله و چرخش با زاویه های بیشتر روی یکدیگر قرار گرفتند و مستطیل های قرمز رنگ محدوده کلیک هر کارت رو مشخص میکنه.

2.jpg

فکر میکنم محدوده کلیک یک شی رو نمیشه بصورت زاویه دار تعیین کرد. یعنی کاری کرد که محدوده کلیک کارت ها چیزی شبیه به عکس زیر باشه ... (مستطیل های قرمز رنگ)

فکر میکردم پس چرخش محدوده کلیک هم با عکس set میشه که متاسفانه اینطور نیست.

3.jpg

امیدورام تونسته باشم منظورم رو بیان کنم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

مورد جالبیه  :fekr: 

نیاز به تحقیق داره  :fekr: 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@@nima_j

 

:fekr:

 

اگه اولین پاسخم به اون شکل بود از این بابت بود که فکر نمیکردم بخواید چنین کاری بکنید  :write: 

حتما روی این قضیه هم کار میکنم!!!

به امید خدا اگه نتیجه ای حاصل شد تو انجمن میذارم.

خودتونم تلاشتون رو بکنید

فکر نمیکنم غیرممکن باشه!  :fekr: 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

anim.InitializeRotate("anim",0,180)

اون صفر مکان چرخش رو مشخص میکنه

 

پاسخ سوال بنده بود ؟ یا سوال پرسیدید ؟

اون صفر زاویه شروع چرخش و 180 زاویه نهایی چرخش هست...

 

ببینید مشکل اینجاست که وقتی آبجکت رو میچرخونیم ، مکان کلیک شدن اون تغییر نمیکنه... برای رویداد کلیک زمانی رخ میده که موقعیت قبل چرخش رو لمس میکنیم نه موقعیت جدید بعد از چرخش !

لینک ارسال
به اشتراک گذاری در سایت های دیگر

@

ببخشید وقتتون رو میگیرم

معمولا سوال های من ، جواب های مبهم و سختی داره.

شایدم سوالام بده که جوابی براش پیدا نمیشه...

شما راه حلی برای مشکلی که در پست اول عرض کردم ندارید ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1394/08/17, 22:40:27، Mehran Mahmoudi گفته است :

@@nima_j

 

:fekr:

 

اگه اولین پاسخم به اون شکل بود از این بابت بود که فکر نمیکردم بخواید چنین کاری بکنید  :write: 

حتما روی این قضیه هم کار میکنم!!!

به امید خدا اگه نتیجه ای حاصل شد تو انجمن میذارم.

خودتونم تلاشتون رو بکنید

فکر نمیکنم غیرممکن باشه!  :fekr: 

در عکسی اولی که قرار دادم ، خروجی سورس شما بود که مکان عکس چرخیده شده رو درست دریافت نکرده بود و پنل متناسب با عکس ساخته نشده بود... همچنین باز هم رویداد کلیک پنل زاویه دار نیست و ما رو به هدف اصلی نمیرسونه.

کلا انگار پس از چرخش left و top عکس هم حقیقی نیست !!!

 

@, @@مجید آرتا

برای حل این مشکل راهی که به ذهنم رسید اینه که باید بر اساس canvas و تشخیص رنگ ها کدنویسی کرد.

یعنی یک پنل زیر کارت ها باشه ، و یه شی canvas رو با این پنل اینیشیالایز کرد و به ازاء هر کارت یک مستطیل رنگی با همان زاویه چرخش روی پنل رسم کرد... و وقتی کاربر روی پنل کلیک کرد ، متناسب با موقعیت کلیک رنگش رو تشخیص بدیم.

هر رنگ هم برای یک کارت در نظر بگیریم و با تشخیص رنگ کلیک شده میفهمیم کدوم کارت انتخاب شده...

اینایی که گفتم نیازمند مهارت کافی در استفاده از canvas  هست که بنده علمش رو ندارم...

فقط میدونم میشه این ایده رو با اون پیاده سازی کرد.

اگر دوستان اساتید در استفاده از canvas مهارت دارن لطفا کمک کنند.

پیشاپیش ممنونم از لطفتون

 

با روش بالا که عرض کردم مشکل حل شد.

فقط چون مربوط به چندین ماه پیش هست سورسش رو پیدا نمیکنم که اینجا بذارم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود،

متوجه این مشکل نشده بودم!

با وجود تمام تلاشی که کردم راه حل اصولی و منطقی برای اینکار پیدا نکردم.

ساده ترین راهی که به ذهنم رسید این بود که یه پنل  روی ویوی مورد نظرم بعد از اعمال انیمیشن اد کنم و از رویداد کلیک اون پنل استفاده کنم.

 

این تابع رو اضافه کنید:

Sub drawOnViewAfterRotate(view As View,panelEventName As String)
	Dim transparent_Panel As Panel
	transparent_Panel.Initialize(panelEventName)
	Activity.AddView(transparent_Panel,view.Left-view.Width,view.Top-view.Height,view.Width,view.Height)
	transparent_Panel.Color=Colors.Transparent
	transparent_Panel.Invalidate
End Sub

در رویداد AnimationEnd:

Sub animPlus_AnimationEnd
	drawOnViewAfterRotate(ImageView1,"ivPnl1")
End Sub

برای استفاده از رویداد کلیک رو پنل (در واقع کلیک روی ایمیج ویو!):

Sub ivPnl1_Click
	Log("click")
End Sub

:fekr: 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...