بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
تغییر اندازه ImageView هنگام کلیک شدن با xml
سلام
من در پوشه 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>
کد شما فرقی با کد من نداره ، و هر دو کد یه نتیجه رو داد . ولی منظورم این بود که با استفاده از این روش ( Xml ) فقط رنگ عکس تغییر میکنه و سایزش تغییر نمیکنه . یعنی اگه عکس مخصوص کلیک شدن 10 % کوچکتر باشه اونو هنگام کلیک نشون میده اما اونو FIT_CENTER میکنه ، یعنی به اندازه عرض و طول کنترل میشه که در ظاهر انگار فقط رنگش عوض میشه ! راه دیگه ای وجود نداره ؟ (10 سال پیش)
مشکل اینجاست که اصلا نباید فایل xml رو به backgraoud نسبت بدیم ( اگه بخوایم تغییر اندازه هم ببینیم ) چون در این صورت عکس به اندازه backgraoud کل کنترل resize میشه و فقط ما تغییر رنگ رو میبینیم و البته یه کم افت کیفیت . برای همین فایل xml رو به src اختصاص دادم چون وقتی با کد نویسی میگیم setImageResource ، مقدار src رو تغییر میده و برای imageView فرق background با src اینه که background میاد بدون توجه به افت کیفیت ، عکس اصلی رو به اندازه عرض و طول imageView تغییر میده ، ولی src این اجازه رو بهت میده که با ست کردن مقدار scaleType به CENTER_INSIDE عکس رو با اندازه اصلی ببینی یعنی اگه ابعاد عکس کوچکتر از ابعاد imageView باشه همونطور کوچک نشونش میده و بزرگ یا stretch نمیکنه . خلاصه بگم : چرا با کد نویسی رنگ و سایز عکس تغییر میکنه ولی اگه همون عکس ها رو با xml به src یا backgraound اختصاص بدم ، سایز تغییر نمیکنه و عکس اصلی رو به اندازه کنترل در میاره ؟ (10 سال پیش)
به صورت یکجا ؟ من در فایل xml فقط drawable رو تغییر دادم و جواب هم میده و عکس عوض میشه و خاصیت scaleType = CENTER_INSIDE رو که در xml ندادم ، اونو کلی تعریف کردم ، پس وقتی داره عکسو عوض میکنه و scaleType هم که مشخصه ، نباید اونو بزرگ کنه ، همینو نمیفهمم . در ضمن قبلا که در انجمن پرسیده شده بود در مورد تغییر رنگ متن دکمه یا تکست با xml ، جواب داده بودن که متن دکمه رو باید با کد نویسی تغییر بدی و با xml نمیشه ، اما من همین کار رو هم با xml انجام دادم ، یعنی میخوام بگم درسته همه کار رو نمیشه با xml انجام داد ولی فکر میکنم این چیزی که من میخوام ساده باشه ولی نمیدونم چرا نمیشه . (10 سال پیش)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .