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

تغییر اندازه ImageView هنگام کلیک شدن با xml

Reza  10 سال پیش  10 سال پیش
0 0

سلام

    من در پوشه drawable دو عکس دارم : یکی با نام close و دیگری با نام close_Pressed که کمی کوچکتر از اولی ست . همیشه با استفاده از xml میتونستم برای حالت کلیک شدن تغییر رنگ ایجاد کنم ، اما الان علاوه بر تغییر رنگ میخوام سایز عکس هم تغییر کنه ، برای همین برای imageView متد زیر رو ست کردم :

 imgClose.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

ImageView img = (ImageView) v;

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
img.setImageResource(R.drawable.close_pressed);
break;

case MotionEvent.ACTION_UP:
img.setImageResource(R.drawable.close);
break;
}

return true;
}
})

    و همه چیز درست و عالی کار میکنه و هنگام کلیک شدن عکس کوچک تر میشه و رنگش هم تغییر میکنه . اما سوالم اینه که چرا از طریق Xml نمیشه :

فایل close_selector :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:drawable="@drawable/close" android:state_pressed="false"></item>
<item android:drawable="@drawable/close_pressed" android:state_pressed="true"></item>

</selector

و این فایل رو به خصوصیت src اون imageView دادم :

 <ImageView
android:id="@+id/imgClose"
android:layout_width="48dip"
android:layout_height="48dip"
android:scaleType="centerInside"
android:src="@drawable/close_selector"/>

و اصلا عمل نمیکنه . ممنون میشم راهنماییم کنید . میخوام این کار رو با xml انجام بدم چون اصولی تره .

ممنون .

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
kamal_hajatmand  10 سال پیش
0 0

من از این کدهای xml برای اینکار استفاده میکنم 

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/buttonpressed" android:state_pressed="true" />
<item android:drawable="@drawable/button" />
</selector>
 
0 0
کد شما فرقی با کد من نداره ، و هر دو کد یه نتیجه رو داد . ولی منظورم این بود که با استفاده از این روش ( Xml ) فقط رنگ عکس تغییر میکنه و سایزش تغییر نمیکنه . یعنی اگه عکس مخصوص کلیک شدن 10 % کوچکتر باشه اونو هنگام کلیک نشون میده اما اونو FIT_CENTER میکنه ، یعنی به اندازه عرض و طول کنترل میشه که در ظاهر انگار فقط رنگش عوض میشه ! راه دیگه ای وجود نداره ؟ (10 سال پیش)
+1 0
مشکل اینجاست که اصلا نباید فایل xml رو به backgraoud نسبت بدیم ( اگه بخوایم تغییر اندازه هم ببینیم ) چون در این صورت عکس به اندازه backgraoud کل کنترل resize میشه و فقط ما تغییر رنگ رو میبینیم و البته یه کم افت کیفیت . برای همین فایل xml رو به src اختصاص دادم چون وقتی با کد نویسی میگیم setImageResource ، مقدار src رو تغییر میده و برای imageView فرق background با src اینه که background میاد بدون توجه به افت کیفیت ، عکس اصلی رو به اندازه عرض و طول imageView تغییر میده ، ولی src این اجازه رو بهت میده که با ست کردن مقدار scaleType به CENTER_INSIDE عکس رو با اندازه اصلی ببینی یعنی اگه ابعاد عکس کوچکتر از ابعاد imageView باشه همونطور کوچک نشونش میده و بزرگ یا stretch نمیکنه . خلاصه بگم : چرا با کد نویسی رنگ و سایز عکس تغییر میکنه ولی اگه همون عکس ها رو با xml به src یا backgraound اختصاص بدم ، سایز تغییر نمیکنه و عکس اصلی رو به اندازه کنترل در میاره ؟ (10 سال پیش)
+1 0
جوابش سادس چون xml همچین قابلیتی برای سلکتورهاش بصورت یکجا در نظر نگرفته ! (10 سال پیش)
0 0
به صورت یکجا ؟ من در فایل xml فقط drawable رو تغییر دادم و جواب هم میده و عکس عوض میشه و خاصیت scaleType = CENTER_INSIDE رو که در xml ندادم ، اونو کلی تعریف کردم ، پس وقتی داره عکسو عوض میکنه و scaleType هم که مشخصه ، نباید اونو بزرگ کنه ، همینو نمیفهمم . در ضمن قبلا که در انجمن پرسیده شده بود در مورد تغییر رنگ متن دکمه یا تکست با xml ، جواب داده بودن که متن دکمه رو باید با کد نویسی تغییر بدی و با xml نمیشه ، اما من همین کار رو هم با xml انجام دادم ، یعنی میخوام بگم درسته همه کار رو نمیشه با xml انجام داد ولی فکر میکنم این چیزی که من میخوام ساده باشه ولی نمیدونم چرا نمیشه . (10 سال پیش)

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