আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে আমার কাছে চিত্রদর্শন রয়েছে যা আমি দেওয়া অনক্লিক ইভেন্টের বোতামের মতো ব্যবহার করছি, তবে আপনি অনুমান করতে পারেন এটি ক্লিক করার সময় চিত্রের ভিউটিকে ক্লিকযোগ্য প্রভাব দিচ্ছে না। আমি কীভাবে এটি অর্জন করতে পারি?
আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে আমার কাছে চিত্রদর্শন রয়েছে যা আমি দেওয়া অনক্লিক ইভেন্টের বোতামের মতো ব্যবহার করছি, তবে আপনি অনুমান করতে পারেন এটি ক্লিক করার সময় চিত্রের ভিউটিকে ক্লিকযোগ্য প্রভাব দিচ্ছে না। আমি কীভাবে এটি অর্জন করতে পারি?
উত্তর:
আপনি ক্লিক করা / ক্লিক না করা রাজ্যের জন্য বিভিন্ন চিত্র ডিজাইন করতে পারেন এবং নীচে সেগুলি অন টচলিস্টারে সেট করতে পারেন
final ImageView v = (ImageView) findViewById(R.id.button0);
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.setImageBitmap(res.getDrawable(R.drawable.img_down));
break;
}
case MotionEvent.ACTION_CANCEL:{
v.setImageBitmap(res.getDrawable(R.drawable.img_up));
break;
}
}
return true;
}
});
আরও ভাল পছন্দটি হ'ল আপনি নিম্নরূপে কোনও নির্বাচককে সংজ্ঞায়িত করুন
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/img_down" />
<item android:state_selected="false"
android:drawable="@drawable/img_up" />
</selector>
এবং ইভেন্টে চিত্রটি নির্বাচন করুন:
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
v.setSelected(arg1.getAction()==MotionEvent.ACTION_DOWN);
return true;
}
});
MotionEvent.ACTION_DOWN || MotionEvent.ACTION_MOVE
আমরা যতক্ষণ চাপ দিচ্ছি ততক্ষণ চিত্রটি প্রদর্শিত রাখা ভাল ।
setOnTouchListener(...
। আপনি কেবল <selector ...>
এটিকে তৈরি করতে পারেন এবং তারপরে এক্সএমএলে চিত্রের দৃশ্য ক্লিকযোগ্য সেট করতে পারেন<ImageView ... android:clickable="true" android:focusable="true" android:src="@drawable/my_selector" />
আপনি এই জাতীয় কিছু ব্যবহার করে একটি একক চিত্রের সাহায্যে এটি করতে পারেন:
//get the image view
ImageView imageView = (ImageView)findViewById(R.id.ImageView);
//set the ontouch listener
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
ImageView view = (ImageView) v;
//overlay is black with transparency of 0x77 (119)
view.getDrawable().setColorFilter(0x77000000,PorterDuff.Mode.SRC_ATOP);
view.invalidate();
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
ImageView view = (ImageView) v;
//clear the overlay
view.getDrawable().clearColorFilter();
view.invalidate();
break;
}
}
return false;
}
});
সহজেই পুনরায় ব্যবহারযোগ্যতার জন্য আমি সম্ভবত এটি চিত্রবিউজের একটি সাবক্লাসে তৈরি করব (বা এটি চিত্রকল্পের একটি সাবক্লাসও হ'ল) তবে এটি আপনাকে চিত্রকল্পে "নির্বাচিত" চেহারা প্রয়োগ করার অনুমতি দেবে।
false
, অন্যথায় দেখার আসল onClick()
ঘটনাটি বরখাস্ত করা হবে না
কালারফিল্টার পদ্ধতিটি ব্যবহার করে কেবল একটি চিত্র ফাইল দিয়ে করা সম্ভব । যাইহোক, কালারফিল্টার বাটনগুলি নয় চিত্রাবলীর সাথে কাজ করার প্রত্যাশা করে, তাই আপনাকে আপনার বোতামগুলি ইমেজভিউতে রূপান্তর করতে হবে। আপনি যেভাবেই ইমেজগুলি আপনার বোতাম হিসাবে ব্যবহার করছেন এটি কোনও সমস্যা নয় তবে আপনি যদি পাঠ্য পেয়ে থাকেন তবে এটি আরও বিরক্তিকর ... যাইহোক, আপনি পাঠ্যের সাহায্যে সমস্যার কোনও উপায় খুঁজে পেয়েছেন, ধরে নেওয়ার কোডটি এখানে রেখেছেন:
ImageView button = (ImageView) findViewById(R.id.button);
button.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
এটি বোতামটিতে একটি লাল ওভারলে প্রযোজ্য (রঙিন কোডটি সম্পূর্ণ অস্বচ্ছ লাল জন্য হেক্স কোড - প্রথম দুটি অঙ্ক স্বচ্ছতা, তারপরে এটি আরআর জিজি বিবি))।
সম্পাদনা : যদিও নীচের মূল উত্তরটি কাজ করে এবং সেট আপ করা সহজ, আপনি যদি আরও দক্ষ প্রয়োগের প্রয়োজন চান তবে গুগলে অ্যান্ড্রয়েড বিকাশকারী অ্যাডভোকেট এই পোস্টটি দেখুন refer এছাড়াও মনে রাখবেন android:foreground
অ্যাট্রিবিউট সকল দৃশ্য আসছে অ্যান্ড্রয়েড এম এ ImageView সহ, ডিফল্ট অনুসারে
ইমেজভিউয়ের জন্য নির্বাচক ব্যবহার করার ক্ষেত্রে সমস্যাটি হ'ল আপনি এটিকে কেবল দেখার ব্যাকগ্রাউন্ড হিসাবে সেট করতে পারবেন - যতক্ষণ না আপনার চিত্র অস্বচ্ছ, আপনি তার পিছনে নির্বাচকটির প্রভাব দেখতে পাবেন না।
কৌশলটি হ'ল বৈশিষ্ট্যযুক্ত একটি ফ্রেমলাউট আপনার চিত্রবিউজকে মোড়ানো android:foreground
যা আমাদের এর সামগ্রীর জন্য ওভারলে সংজ্ঞায়িত করতে দেয় । যদি আমরা android:foreground
কোনও নির্বাচককে সেট করি (উদাহরণস্বরূপ ?android:attr/selectableItemBackground
, এপিআই স্তর 11+ এর জন্য) এবং OnClickListener
চিত্রটি ভিউয়ের পরিবর্তে ফ্রেম-লেআউটে এটিকে সংযুক্ত করি , তবে চিত্রটি আমাদের নির্বাচকের অঙ্কনীয় - আমাদের পছন্দ ক্লিকের প্রভাব দিয়ে আবৃত হবে!
দেখুন:
<FrameLayout
android:id="@+id/imageButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?android:attr/selectableItemBackground" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/yourImageFile" />
</FrameLayout>
(নোট করুন এটি আপনার প্যারেন্ট লেআউটের মধ্যে স্থাপন করা উচিত))
final View imageButton = findViewById(R.id.imageButton);
imageButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
// do whatever we wish!
}
});
selectableItemBackground
অ্যাট্রিবিউট শুধুমাত্র এপিআই স্তর 11 যোগ করা হয়েছিল যাতে আপনার পুরোনো API লেভেলের জন্য এই সমাধান ব্যবহার করতে চান তাহলে অন্য নির্বাচক ব্যবহার করা আবশ্যক। উদাহরণস্বরূপ, আমার অ্যাপ্লিকেশনগুলির মধ্যে একটি যা এপিআই স্তরের 7 সমর্থন করে, আমি অ্যান্ড্রয়েড হলো কালার জেনারেটর সরঞ্জাম@drawable/list_selector_holo_light
ব্যবহার করে উত্পন্ন উত্সটি ব্যবহার করি ।
<ImageButton>
নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড সহ 1 টি ব্যবহার করে একই আচরণ অর্জন করতে পারেন !
এক্সএমএল ফাইলে স্টাইল = "? অ্যান্ড্রয়েড: সীমান্তহীন বাটন স্টাইল" ব্যবহার করুন। এটি অ্যান্ড্রয়েড ডিফল্ট ক্লিক প্রভাব প্রদর্শন করবে।
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
style="?android:borderlessButtonStyle"
/>
android:adjustViewBounds="true"
প্যাডিং আনসেট করতে অ্যান্ড্রয়েড ডেভেলপার ব্যবহার করুন ।
style="?android:attr/borderlessButtonStyle"
: developer.android.com/guide/topics/ui/controls/…
style="?android:actionButtonStyle"
অ্যাকশনবার বা সরঞ্জামদণ্ডে ক্লিকযোগ্যযোগ্য চিত্রকল্পের জন্য ব্যবহার করুন ।
কেবলমাত্র একটি ইমেজবটন ব্যবহার করুন ।
এটি সমাধানের জন্য আমার সহজ উপায়:
ImageView iv = (ImageView) findViewById(R.id.imageView);
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//Agrega porcentajes de cada fraccion de grafica pastel
Animation animFadein = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in);
iv.startAnimation(animFadein);
});
ফাইলটিতে res/anim/fade_in.xml
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" >
<alpha
android:duration="100"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
ইমেজভিউতে বাছাইযোগ্য পটভূমি সেট করুন এবং কিছু প্যাডিং যুক্ত করুন। তারপরে সংযুক্ত করুন OnClickListener
।
<ImageView
android:id="@+id/your_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_image"
android:padding="10dp"
android:background="?android:attr/selectableItemBackground"/>
নির্বাচক অঙ্কনযোগ্য পছন্দ সংজ্ঞায়িত করার জন্য
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/img_down" />
<item android:state_selected="false"
android:drawable="@drawable/img_up" />
</selector>
আমাকে অ্যান্ড্রয়েড ব্যবহার করতে হবে: অ্যান্ড্রয়েডের পরিবর্তে রাষ্ট্র_প্রেসিত: state_selected
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed ="true"
android:drawable="@drawable/img_down" />
<item android:state_pressed ="false"
android:drawable="@drawable/img_up" />
</selector>
আপনি যদি আলতো চাপতে চান তবে আপনি এই কোডটি দিয়ে দিতে পারেন:
<ImageView
...
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
...
</ImageView>
একইভাবে, আপনি টেক্সটভিউয়ের জন্য ক্লিক প্রভাব প্রয়োগ করতে পারেন
<TextView
...
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
...
</TextView>
আপনি android:background="@android:drawable/list_selector_background"
ডিফল্ট "অ্যালার্ম ক্লক" (এখন ডেস্ক ক্লক) "এলার্ম যুক্ত করুন" এর মতো একই প্রভাব পেতে চেষ্টা করতে পারেন।
এটি আমার পক্ষে কাজ করেছে:
img.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
((ImageView)v).setImageAlpha(200);
break;
}
case MotionEvent.ACTION_MOVE:
{
// if inside bounds
if(event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight())
{
((ImageView)v).setImageAlpha(200);
}
else
{
((ImageView)v).setImageAlpha(255);
}
break;
}
case MotionEvent.ACTION_UP:
{
((ImageView)v).setImageAlpha(255);
}
}
return true;
}
});
@ সম্পাদনা: গুনাহান যেমন বলেছিলেন সেট ইমেজআল্ফা পদ্ধতিতে পশ্চাদপদ সামঞ্জস্য সমস্যা থাকবে। আমি এই পদ্ধতিটি ব্যবহার করেছি:
public static void setImageAlpha(ImageView img, int alpha)
{
if(Build.VERSION.SDK_INT > 15)
{
img.setImageAlpha(alpha);
}
else
{
img.setAlpha(alpha);
}
}
আমি কিছু অনুরূপ জিনিস আপনার জন্য উপযুক্ত না দেখুন
প্রেস এফেক্ট হেল্পার দেখুন:
ব্যবহার: আইওএসের মতো কিছু সাধারণ প্রেস এফেক্ট করুন
সাধারণ ব্যবহার:
ইমেজভিউ img = (ইমেজভিউ) সন্ধান ভিউবিআইআইডি (আর.আইডি.আইএমজি);
উপরের সমস্ত উত্তরের সাথে একত্রে, আমি চাইছিলাম যে চিত্রটি দেখুন টিপুন এবং পরিবর্তিত রাষ্ট্র হোক তবে যদি ব্যবহারকারী সরানো থাকে তবে "বাতিল করুন" এবং অনক্লিকলিস্টনার সম্পাদন না করে।
আমি ক্লাসের মধ্যে একটি পয়েন্ট অবজেক্ট তৈরি করেছি এবং যখন ব্যবহারকারী ইমেজভিউতে নামাবেন তখন অনুযায়ী এর স্থানাঙ্কগুলি সেট করুন। মোশনইভেন্টে। অ্যাকশন_আপে আমি একটি নতুন পয়েন্ট রেকর্ড করেছি এবং পয়েন্টগুলি তুলনা করছি।
আমি কেবল এটি এত ভাল ব্যাখ্যা করতে পারি, তবে আমি যা করেছি তা এখানে।
// set the ontouch listener
weatherView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Determine what action with a switch statement
switch (event.getAction()) {
// User presses down on the ImageView, record the original point
// and set the color filter
case MotionEvent.ACTION_DOWN: {
ImageView view = (ImageView) v;
// overlay is black with transparency of 0x77 (119)
view.getDrawable().setColorFilter(0x77000000,
PorterDuff.Mode.SRC_ATOP);
view.invalidate();
p = new Point((int) event.getX(), (int) event.getY());
break;
}
// Once the user releases, record new point then compare the
// difference, if within a certain range perform onCLick
// and or otherwise clear the color filter
case MotionEvent.ACTION_UP: {
ImageView view = (ImageView) v;
Point f = new Point((int) event.getX(), (int) event.getY());
if ((Math.abs(f.x - p.x) < 15)
&& ((Math.abs(f.x - p.x) < 15))) {
view.performClick();
}
// clear the overlay
view.getDrawable().clearColorFilter();
view.invalidate();
break;
}
}
return true;
}
});
ইমেজভিউতে আমার অনক্লিকলিস্টনার সেট আছে তবে এটি কোনও পদ্ধতি হতে পারে।
MotionEvent.ACTION_CANCEL
একই কার্যকারিতা সহ কেস যুক্ত করে যদি MotionEvent.ACTION_UP
ব্যবহারকারীরা কোনও "টানুন" সম্পাদন করেন যা ক্লিক অ্যাকশন নয়।
আপনি setPressed
ইচ্ছুকভিউতে ওভাররাইড করতে পারেন এবং সেখানে রঙিন ফিল্টারিং করতে পারেন, টুচেন্ট শ্রোতাদের তৈরি করার পরিবর্তে:
@Override
public void setPressed(boolean pressed) {
super.setPressed(pressed);
if(getDrawable() == null)
return;
if(pressed) {
getDrawable().setColorFilter(0x44000000, PorterDuff.Mode.SRC_ATOP);
invalidate();
}
else {
getDrawable().clearColorFilter();
invalidate();
}
}
মিঃ জর্নের উত্তরের ভিত্তিতে , আমি আমার বিমূর্ত ইউটিলিটি ক্লাসে একটি স্ট্যাটিক পদ্ধতি ব্যবহার করি:
public abstract class Utility {
...
public static View.OnTouchListener imgPress(){
return imgPress(0x77eeddff); //DEFAULT color
}
public static View.OnTouchListener imgPress(final int color){
return new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN: {
ImageView view = (ImageView) v;
view.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
view.invalidate();
break;
}
case MotionEvent.ACTION_UP:
v.performClick();
case MotionEvent.ACTION_CANCEL: {
ImageView view = (ImageView) v;
//Clear the overlay
view.getDrawable().clearColorFilter();
view.invalidate();
break;
}
}
return true;
}
};
}
...
}
তারপরে আমি এটি টাচলিস্টনার দিয়ে ব্যবহার করব:
ImageView img=(ImageView) view.findViewById(R.id.image);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { /* Your click action */ }
});
img_zc.setOnTouchListener(Utility.imgPress()); //Or Utility.imgPress(int_color_with_alpha)
এটি খুব সহজ যদি আপনার অনেকগুলি চিত্র থাকে এবং আপনি কোনও এক্সএমএল অঙ্কনযোগ্য এবং কেবল একটি চিত্র না করেই একটি সাধারণ অন টচ এফেক্ট চান।
একটি ব্যবহার করুন android.widget.Button
, এবং এর background
সম্পত্তিটিকে একটিতে সেট করুন android.graphics.drawable.StateListDrawable
। এটি সব এক্সএমএল বা প্রোগ্রামগতভাবে করা যেতে পারে। ফর্ম স্টাফ টিউটোরিয়ালের কাস্টম বোতাম বিভাগটি দেখুন ।
আমি এখানে নমুনা তৈরি করেছি , কেবলমাত্র আপনার বিন্যাস থেকে চিত্রাবলীতে ক্লিকযোগ্য আইমেজভিউতে পরিবর্তন করুন। আশা করি এটি সাহায্য করবে।
আমি মনে করি ইমেজবটন একটি আরও ভাল সমাধান
<ImageButton
android:layout_width="96dp"
android:layout_height="56dp"
android:src="@mipmap/ic_launcher"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:foreground="@drawable/selector" />
আপনি যদি ব্যাকগ্রাউন্ড চিত্র ব্যবহার করেন তবে আমার আরও সৌন্দর্য সমাধান আছে :)
public static void blackButton(View button){
button.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xf0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
break;
}
}
return false;
}
});
}
বা:
আপনি ইমেজ বাটন সহ এই ফর্মটি ব্যবহার করতে পারেন।
ফাইল তৈরি করুন res/drawable/btn_video.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image"
android:state_pressed="true" />
<item android:drawable="@drawable/ico2"
android:state_focused="true" />
<item android:drawable="@drawable/ico2" />
</selector>
এবং res/layout/activity_main.xml
:
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton"
android:layout_gravity="center_horizontal"
android:onClick="eventImageBtn"
android:background="@drawable/btn_video"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
আপনার চিত্রটি একটি ক্লিকে পরিবর্তন হয় এবং আপনি একটি রৈখিক বিন্যাসের সাথে সামঞ্জস্য করতে পারেন:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/menu_item_background">
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"
android:paddingLeft="@dimen/main_screen_side_padding" android:paddingRight="@dimen/main_screen_side_padding" android:paddingTop="@dimen/main_screen_side_padding" android:paddingBottom="@dimen/main_screen_side_padding"
android:background="#ffb3ff13" android:weightSum="10.00">
<LinearLayout android:layout_weight="2.50" android:background="#ff56cfcd" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="0dp" >
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton"
android:layout_gravity="center_horizontal"
android:onClick="eventImageBtn"
android:background="@drawable/btn_video"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
</LinearLayout>
<LinearLayout android:layout_weight="0.50" android:layout_height="0dp" android:background="#ffffffff" android:orientation="vertical" android:layout_width="fill_parent" >
</LinearLayout>
<LinearLayout android:layout_weight="4.50" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="0dp" android:background="#ff8aa5ff">
</LinearLayout>
<LinearLayout android:layout_weight="0.50" android:layout_height="0dp" android:background="#ffffffff" android:orientation="vertical" android:layout_width="fill_parent" >
</LinearLayout>
<LinearLayout android:layout_weight="2.00" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="0dp" android:background="#ffff7d1a" >
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
এখানে আমার সমাধানটি দেওয়া হয়েছে, যা " নন ওল্ডঅ্যান্ড্রয়েডস " লাইব্রেরি ব্যবহার করে , পুরানো এপিআইগুলিকেও সমর্থন করে:
rootView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
v.setBackgroundResource(R.drawable.listview_normal);
ViewHelper.setAlpha(imageView, 1);
break;
case MotionEvent.ACTION_DOWN:
v.setBackgroundResource(0);
v.setBackgroundColor(getResources().getColor(R.color.listview_pressed));
ViewHelper.setAlpha(imageView, 0.75f);
break;
}
return false;
}
});
এটি ধরে নেয় যে রুটভিউটি সেলটি নিজেই (বিন্যাস), এবং এটিতে একটি একক চিত্র রয়েছে যা আপনি পুরো ঘরে প্রয়োগ করতে চান এমন রঙ দ্বারা প্রভাবিত হতে চান।
সম্পাদনা: আপনি যদি চান, আপনি অগ্রভাগ পরিচালনা করতে ইমেজভিউও প্রসারিত করতে পারেন এবং এটিকে "? Android: attr / selectableItemBackground" এ সেট করতে পারেন। এই জন্য একটি লাইব্রেরী এখানে এবং কিভাবে কোন দৃশ্য ইচ্ছা, তা করতে হবে সেই বিষয়ে একটি টিউটোরিয়াল এখানে ।
এই থ্রেডে সাহায্যের জন্য ধন্যবাদ। তবে, আপনি একটি জিনিস মিস করেছেন ... আপনার পাশাপাশি ACTION_CANCEL পরিচালনা করতে হবে। যদি আপনি না করেন তবে আপনি সম্ভবত চিত্রাবলীর আলফা মানটি সেই ইভেন্টে ঠিকঠাকভাবে পুনরুদ্ধার করতে পারবেন না যা দৃশ্যের পিতামাতার দর্শনটি কোনও স্পর্শ ইভেন্টকে বাধা দেয় (ভাবুন কোনও স্ক্রোলভিউ আপনার চিত্রের ভিউ মোড়ানো)।
এখানে একটি সম্পূর্ণ শ্রেণি রয়েছে যা উপরের শ্রেণীর উপর ভিত্তি করে তবে ACTION_CANCEL এরও যত্ন করে। এটি প্রাক-পোস্ট জেলিবিয়ান এপিআই-এর পার্থক্য বিমূর্ত করতে একটি চিত্রভিউকম্প্যাট সহায়ক শ্রেণি ব্যবহার করে।
public class ChangeAlphaOnPressedTouchListener implements OnTouchListener {
private final float pressedAlpha;
public ChangeAlphaOnPressedTouchListener(float pressedAlpha) {
this.pressedAlpha = pressedAlpha;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView iv = (ImageView) v;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
ImageViewCompat.setAlpha(iv, pressedAlpha);
break;
case MotionEvent.ACTION_MOVE:
if (isInsideViewBounds(v, event)) {
ImageViewCompat.setAlpha(iv, pressedAlpha);
} else {
ImageViewCompat.setAlpha(iv, 1f);
}
break;
case MotionEvent.ACTION_UP:
ImageViewCompat.setAlpha(iv, 1f);
break;
case MotionEvent.ACTION_CANCEL:
ImageViewCompat.setAlpha(iv, 1f);
}
return false;
}
private static boolean isInsideViewBounds(View v, MotionEvent event) {
return event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0
&& event.getY() < v.getHeight();
}
}
এখানে আমার কোড। ধারণাটি হ'ল ব্যবহারকারীরা এটি স্পর্শ করলে চিত্র চিত্রটি রঙিন ফিল্টার পায় এবং ব্যবহারকারী যখন এটি স্পর্শ করা বন্ধ করে দেয় তখন রঙিন ফিল্টার সরিয়ে ফেলা হয়।
মার্টিন বুকা ওয়েজার, অ্যান্ড্রেস, আহ লাম, ইলতোশ, যখন সমাধানটি কাজ করে না যখন ইমেজভিউতেও ক্লিক ক্লাব রয়েছে। worawee.s এবং kcoppock (ইমেজবটন সহ) সমাধানের জন্য পটভূমি প্রয়োজন, যখন ইমেজভিউ স্বচ্ছ নয় তখন এর কোনও ধারণা নেই।
এটি রঙিন ফিল্টার সম্পর্কে AZ_ ধারণার এক্সটেনশন ।
class PressedEffectStateListDrawable extends StateListDrawable {
private int selectionColor;
public PressedEffectStateListDrawable(Drawable drawable, int selectionColor) {
super();
this.selectionColor = selectionColor;
addState(new int[] { android.R.attr.state_pressed }, drawable);
addState(new int[] {}, drawable);
}
@Override
protected boolean onStateChange(int[] states) {
boolean isStatePressedInArray = false;
for (int state : states) {
if (state == android.R.attr.state_pressed) {
isStatePressedInArray = true;
}
}
if (isStatePressedInArray) {
super.setColorFilter(selectionColor, PorterDuff.Mode.MULTIPLY);
} else {
super.clearColorFilter();
}
return super.onStateChange(states);
}
@Override
public boolean isStateful() {
return true;
}
}
ব্যবহার:
Drawable drawable = new FastBitmapDrawable(bm);
imageView.setImageDrawable(new PressedEffectStateListDrawable(drawable, 0xFF33b5e5));
আমি চেষ্টা করেছিলাম:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/get_started"
android:src="@drawable/home_started"
style="?android:borderlessButtonStyle"
android:adjustViewBounds="true"
android:clickable="true"
android:elevation="5dp"
android:longClickable="true" />
এবং এটি কাজ করে। লাইনে নোট করুন:style="?android:borderlessButtonStyle"
আমি মনে করি সবচেয়ে সহজ উপায়টি একটি নতুন এক্সএমএল ফাইল তৈরি করছে। এই ক্ষেত্রে, আসুন অঙ্কনযোগ্য ফোল্ডারে এটি "উদাহরণ.xML" বলুন এবং অনুসরণ কোডটি রেখে দিন:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/blue"
android:state_pressed="true" />
</selector>
তবে এর আগে আপনাকে মানগুলি ফোল্ডারে color.xML ফাইলে রঙগুলি সেট করতে হবে:
<resources>
<color name="blue">#0000FF</color>
</resources>
এটি তৈরি হয়ে গেছে, আপনি নতুন লেআউটটি ব্যবহার করার জন্য কেবল বাটন / চিত্র-বাটনটি সেট করেছেন:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/example"
/>
তারপরে আপনি যখন সেই চিত্রটি ক্লিক করবেন, তখন এটি রঙিন সেট হয়ে যাবে
<item android:drawable="@color/blue"
android:state_pressed="true" />
আপনি চান মতামত প্রদান ...
এটি আমার দেখা সেরা সমাধান। এটি আরও জেনেরিক।
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" >
<alpha
android:duration="100"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
আমি এক্সএমএলে নিম্নলিখিত হিসাবে করেছি - ইমেজটির চারপাশে 0 টি প্যাডিং এবং চিত্রের শীর্ষে রিপল :
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/my_image"
android:clickable="true"
android:focusable="true"
android:src="?android:attr/selectableItemBackground" />
আপাতত আমাদের মেটেরিয়াল ডিজাইনের অনুশীলন গড়ে তোলা উচিত । এই ক্ষেত্রে আপনি কোনও চিত্র ভিউতে একটি রিপল প্রভাব যুক্ত করতে পারেন।
কেবল এক্সএমএল বৈশিষ্ট্য, অ্যান্ড্রয়েড যুক্ত করুন: ক্লিকযোগ্য = "সত্য" ...