অ্যান্ড্রয়েড ললিপপ কার্ডভিউতে রিপল প্রভাব


190

অ্যান্ড্রয়েড সেট করে স্পর্শ করার সময় আমি রিপল এফেক্টটি প্রদর্শনের জন্য একটি কার্ডভিউ পাওয়ার চেষ্টা করছি: অ্যান্ড্রয়েড বিকাশকারী পৃষ্ঠাগুলিতে এখানে বর্ণিত ক্রিয়াকলাপ এক্সএমএল ফাইলের ব্যাকগ্রাউন্ড বৈশিষ্ট্য , তবে এটি কাজ করছে না। মোটেও কোনও অ্যানিমেশন নেই, তবে অনক্লিকের পদ্ধতিটি বলা হয়। আমি এখানে প্রস্তাবিত হিসাবে একটি রিপল.এক্সএমএল ফাইল তৈরি করার চেষ্টা করেছি , তবে একই ফলাফল।

কার্ডভিউটি ক্রিয়াকলাপের এক্সএমএল ফাইলে যেমন প্রদর্শিত হবে:

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="155dp"
    android:layout_height="230dp"
    android:elevation="4dp"
    android:translationZ="5dp"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:onClick="showNotices"
    android:background="?android:attr/selectableItemBackground"
    android:id="@+id/notices_card"
    card_view:cardCornerRadius="2dp">

</android.support.v7.widget.CardView> 

আমি অ্যান্ড্রয়েড বিকাশে তুলনামূলকভাবে নতুন, তাই আমি কয়েকটি স্পষ্ট ভুল করতে পারি।
আগাম ধন্যবাদ.

উত্তর:


591

আপনার নিম্নলিখিতগুলি যুক্ত করা উচিত CardView:

android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"

8
রিপল এফেক্টের সাথে ললিপপে কাজ করে তবে পুরানো প্ল্যাটফর্মগুলিতে চালিত হলেই কেবল রঙিন রঙ দেওয়া হয়। আমার জন্য যথেষ্ট ভাল :)
mach

16
সামান্য পর্যবেক্ষণ: আমি লক্ষ করেছি যে ক্লিকযোগ্য বৈশিষ্ট্যটি প্রয়োজনীয় নয় এবং এমনকি কিছু জিনিস ভেঙে দিতে পারে! আমার এএ গ্রিডভিউ ক্লিকযোগ্য কার্ডভিউতে ভরা ছিল এবং শ্রোতা সঠিকভাবে কাজ করছে না। আমি এক্সএমএল থেকে ক্লিকযোগ্য ট্যাগটি সরিয়েছি এবং এখন সবকিছু
নির্বিঘ্নে

2
ক্লিকযোগ্য ছাড়াই @ জোয়াকুইন, এটি কেবলমাত্র কেন্দ্র থেকে
riেউয়ের উত্থান ঘটায়

2
?android:attr/selectableItemBackgroundএপিআই স্তরের 11
প্রতীক বুটানী

9
ছাড়া কাজ করা android:clickable="true"
শান

30

আপনার কার্ডভিউতে রিপল প্রভাব দেওয়ার জন্য আপনার এই এক্সএমএল ভিউতে এই দুটি লাইন কোড যুক্ত করুন।

android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"

অসাধারণ! foregroundমোহন মত কাস্টম ব্যাকগ্রাউন্ড ভিউ সাথে কাজ করে! নিস!
Sud007

24

আমি কার্ডভিউতে রিপল প্রভাবটি পরিচালনা করতে পেরেছি এটি দ্বারা:

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:clickable="true" 
    android:foreground="@drawable/custom_bg"/>

এবং উপরের কোডটিতে যে কাস্টম_বিজি আপনি দেখতে পাচ্ছেন তার জন্য আপনাকে ললিপপ (অঙ্কনযোগ্য-ভি 21 প্যাকেজে) এবং প্রাক-ললিপপ (অঙ্কনযোগ্য প্যাকেজে) উভয় ডিভাইসের জন্য একটি এক্সএমএল ফাইল নির্ধারণ করতে হবে। অঙ্কনযোগ্য-ভি 21 প্যাকেজে কাস্টম_বিজি-র জন্য কোডটি হল:

<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
<item
    android:id="@android:id/mask"
    android:drawable="@android:color/white"/>
</ripple>

অঙ্কনযোগ্য প্যাকেজে কাস্টম_বিজি-র জন্য কোডটি হ'ল:

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

<item android:state_pressed="true">
    <shape>
        <solid android:color="@color/colorHighlight"></solid>
    </shape>
</item>
<item>
    <shape>
        <solid android:color="@color/navigation_drawer_background"></solid>
    </shape>
</item>
</selector>

প্রি-ললিপপ ডিভাইসগুলিতে আপনার সলিড ক্লিক এফেক্ট থাকবে এবং ললিপপ ডিভাইসে আপনার কার্ডভিউতে রিপল ইফেক্ট পড়বে।


1
হাই, আমি CardView এর পুরোভাগে, এটা CardView নিজেই শিশুদের অবরুদ্ধ করবে উপর নির্বাচক (অথবা লহরী) প্রয়োগের দ্বারা উপলব্ধি - stackoverflow.com/questions/33763403/... আমি জানতে পারি আপনি একই PROB সম্মুখীন কি হিসাবে আমি করেছি? বা, আমি কিছু মিস করছি? ধন্যবাদ।
চেওক ইয়ান চেং

@ চেওকান চেইং: আমি আপনার মতো কোনও সমস্যার মুখোমুখি নই তবে আমি ব্যক্তিগত অভিজ্ঞতা থেকে বলব যে কার্ডভিউতে প্রাক-ললিপপের জন্য কিছু বাগ রয়েছে। কার্ডভিউ ব্যবহার করা থেকে বিরত থাকুন: প্রি-ললিপপে উন্নত সম্পত্তি। উপরেরটি আমার এবং অন্যান্য উপকারের জন্য ভাল কাজ করে।
রাহুল আহুজা

আমি জানতে পারি, আপনার রঙের হাইটলাইট এবং নেভিগেশন_ড্রেয়ার_ব্যাকগ্রাউন্ডের মান কী। যদি আপনি স্বচ্ছতা ছাড়াই আপনার নিজের বর্ণিত রঙ ব্যবহার করেন তবে আপনি কি এখনও আপনার কার্ডের বাচ্চাদের দেখতে পাচ্ছেন?
চেওক ইয়ান চেং

@ চেওকান চেং: মানগুলি হ'ল, <রঙের নাম = "নেভিগেশন_ড্রেওয়ার_ব্যাকগ্রাউন্ড"> # এফএফএফএফএফ </ কালার> <রঙ নাম = "বর্ণহাইলাইট"> # এফএফ 8 এ 65 </color>
রাহুল আহুজা

আমি আমার মামলায় কাজ করি না। আমি আপনার নির্বাচকটিকে অগ্রভাগ হিসাবে ব্যবহার করি। যেমনটি প্রত্যাশিত, শক্ত সাদা রঙ (নেভিগেশন_ডাওয়ার_ব্যাকগ্রাউন্ড), যা কার্ড ভিউ ফোরগ্রাউন্ড হিসাবে ব্যবহৃত হয় তা সমস্ত বাচ্চার দৃশ্যমানতা ব্লক করে দেবে - i.imgur.com/CleYh5B.png এইভাবে নির্বাচকটিকে অগ্রভাগ হিসাবে প্রয়োগ না করে দেখতে দেখতে - i.imgur। com / ZXk5Aoq.png
চেওক ইয়ান চেং

14

রিপল প্রভাবটি আপনি যা ব্যবহার করছেন অ্যাপকম্প্যাট সমর্থন লাইব্রেরিতে বাদ দেওয়া হয়েছিল। আপনি যদি রিপলটি অ্যানড্রয়েড এল সংস্করণটি ব্যবহার করতে চান এবং এটি একটি অ্যান্ড্রয়েড এল ডিভাইসে পরীক্ষা করতে চান। অ্যাপকম্প্যাট ভি 7 সাইট প্রতি:

"প্রি-ললিপপটিতে কেন কোনও ছোঁয়া নেই? রিপলড্রেবলকে সহজেই চালানোর অনুমতি দেয় অ্যান্ড্রয়েড 5.0 এর নতুন রেন্ডারথ্রেড Android

আরও তথ্যের জন্য এই লিঙ্কটি এখানে দেখুন


এটা হবে। ধন্যবাদ!
আকরাটিক ক্রিটিক

39
তবে কীভাবে আপনি তখন অ্যান্ড্রয়েড ললিপপের জন্য কার্ডভিউতে রিপল প্রভাবটি রাখবেন?
অ্যান্ড্রয়েড বিকাশকারী

সুতরাং আমাকে অ্যাপকম্প্যাট ব্যবহার করে বা সমস্ত নতুন প্রভাব ফেলতে, অ্যান্ড্রয়েড কোর থেকে ক্লাস ব্যবহার করে তবে নিজেকে এপিআই 21 এ সীমাবদ্ধ রেখে পশ্চাদপটে সামঞ্জস্যের মধ্যে আমাকে সিদ্ধান্ত নিতে হবে?
উরস পুনর্নির্ধারণ

আপনি ২ টি APK এর একটি 21+ এর জন্য এবং অন্যটি <21 21 এর জন্য তৈরি করতে পারেন Or
ম্যাথিজস সেজারস

1
এ কারণেই এই মুহুর্তে "খাঁটি" অ্যান্ড্রয়েড এল অ্যাপ্লিকেশনগুলি লেখা কার্যকর নয়। জুলাই ২০১৫ পর্যন্ত আপনি অ্যান্ড্রয়েড ব্যবহারকারী বেসের 12% টার্গেট করবেন।
গ্লেন বেচ

10

আপনি যে অ্যাপ্লিকেশনটিতে minSdkVersionকাজ করছেন তা যদি স্তরের 9 হয় তবে আপনি ব্যবহার করতে পারেন:

android:foreground="?selectableItemBackground"
android:clickable="true"

পরিবর্তে, স্তর 11 থেকে শুরু করে, আপনি ব্যবহার করুন:

android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"

ডকুমেন্টেশন থেকে:

ক্লিকযোগ্য - এই দৃশ্য ইভেন্টগুলিতে ক্লিক করার জন্য প্রতিক্রিয়া জানায় কিনা তা নির্ধারণ করে। "সত্য" বা "মিথ্যা" হয় অবশ্যই বুলিয়ান মান হওয়া উচিত।

অগ্রভূমি - বিষয়বস্তু আঁকতে অঙ্কনযোগ্যকে সংজ্ঞায়িত করে। এটি ওভারলে হিসাবে ব্যবহার করা যেতে পারে। অগ্রণী চিত্র অঙ্কনযোগ্য যদি মাধ্যাকর্ষণ পূরণের জন্য সেট করা থাকে তবে সামগ্রীর প্যাডিংয়ে অংশ নেয়।


অ্যান্ড্রয়েড ব্যবহার: ফোরগ্রাউন্ড = "? অ্যান্ড্রয়েড: অ্যাটর / নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড" অ্যান্ড্রয়েডএক্স সামঞ্জস্যের জন্য কাজ করেছে, ধন্যবাদ!
dianakarenms

6

আমার জন্য, এতে কাজ foregroundকরা CardViewহয়নি (কারণ অজানা: /)

এটির জন্য শিশু লেআউটে একই যোগ করা কৌশলটি করেছে।

কোড:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:focusable="true"
    android:clickable="true"
    card_view:cardCornerRadius="@dimen/card_corner_radius"
    card_view:cardUseCompatPadding="true">

    <LinearLayout
        android:id="@+id/card_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:foreground="?android:attr/selectableItemBackground"
        android:padding="@dimen/card_padding">

    </LinearLayout>
</android.support.v7.widget.CardView>

2
এর কারণ হল শিশুটি ইভেন্টটিকে বাধা দেয়, আপনি যদি কার্ডভিউতে প্যাডিং যুক্ত করার মতো কিছু চেষ্টা করেন (20dp এর মতো কিছু), এবং আপনি যে অংশটি প্যাডিংয়ের অংশটি ক্লিক করেন, আপনি তখন শিশুটিকে ছাড়াও লহর প্রভাবটি দেখতে পাবেন অগ্রভাগ বৈশিষ্ট্য সেট
ক্রুস

1
এটি আমার জন্যও নতুন উপাদান উপাদান: com.google.android.matory.card.MaterialCardView ব্যবহার করে আমার পক্ষে কাজ করেছে। উচ্চতা সামঞ্জস্য করতে কার্ড ভিউয়ের জন্য আমার কাছে একটি এলিভেশন স্টেটলিস্ট অ্যানিমেটার ছিল এবং ক্লিকযোগ্যযোগ্য বৈশিষ্ট্য ছাড়াই অগ্রভাগে নির্বাচিত আইটেমের পটভূমি সহ অভ্যন্তরীণ সীমাবদ্ধ বিন্যাসে রিপাল প্রয়োগ হয়েছিল।
প্যাটি পি

আমি এখন এটি মনে করি না, তবে ক্লিক ইভেন্টটিতে প্রতিক্রিয়া না দেখানোর জন্য শিশুদের দৃষ্টিভঙ্গি সেট করার একটি উপায় রয়েছে
কেউ

3

বোতাম, লিনিয়ার লেআউট বা কার্ডভিউয়ের মতো যে কোনও দৃশ্যের জন্য কবিতার মতো এই দুটি কাজের কোড যুক্ত করুন কেবল এই দুটি লাইন রাখুন এবং যাদু দেখুন ...

android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"

2

কার্ডভিউতে অ্যাডাপ্টারের আইটেমের সমস্ত উপাদান সম্বলিত রিলেটিভলআউট বা লিনিয়ারলআউটের মতো কোনও মূল বিন্যাস থাকলে, আপনাকে সেই মূল বিন্যাসে ব্যাকগ্রাউন্ড বৈশিষ্ট্য নির্ধারণ করতে হবে। মত:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="122dp"
android:layout_marginBottom="6dp"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
card_view:cardCornerRadius="4dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/touch_bg"/>
</android.support.v7.widget.CardView>

2

অ্যান্ড্রয়েড Cardviewনিয়ন্ত্রণের জন্য রিপল ইভেন্ট :

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:foreground="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:layout_marginBottom="4dp"
    android:layout_marginTop="4dp" />

1

আমি অ্যাপকম্প্যাটটিতে খুশি ছিলাম না, তাই আমি নিজের কার্ডভিউ এবং ব্যাকপোর্টেড রিপলস লিখেছি। এখানে এটি জিঞ্জারব্রেড সহ গ্যালাক্সি এস এ চলছে, সুতরাং এটি অবশ্যই সম্ভব।

গ্যালাক্সি এস এ রিপলের ডেমো

আরও তথ্যের জন্য উত্স কোডটি পরীক্ষা করুন ।


লিঙ্কটি ভাঙা হয়েছে
টেমিরবেক

1

আপনার এক্সএমএলে নিম্নলিখিতটি যুক্ত করুন:

android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"

এবং আপনার অ্যাডাপ্টারে যুক্ত করুন (এটি যদি আপনার হয়)

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val attrs = intArrayOf(R.attr.selectableItemBackground)
            val typedArray = holder.itemView.context.obtainStyledAttributes(attrs)
            val selectableItemBackground = typedArray.getResourceId(0, 0)
            typedArray.recycle()

            holder.itemView.isClickable = true
            holder.itemView.isFocusable = true
            holder.itemView.foreground = holder.itemView.context.getDrawable(selectableItemBackground)
        }
    }

0

একটি প্রোগ্রামিকভাবে তৈরি কার্ডভিউ (বা আমার ক্ষেত্রে কাস্টম ভিউ যা কার্ডভিউ প্রসারিত করে) একটি পুনর্ব্যবহারযোগ্য ভিউতে দেখানো হচ্ছে, রিপল ইফেক্টের ইস্যুটির সমাধানের সন্ধানকারীদের জন্য, নিম্নলিখিতগুলি আমার জন্য কাজ করেছে। মূলত এক্সএমএল লেআউট ফাইলটিতে বর্ণিত অন্যান্য উত্তরে বর্ণিত এক্সএমএল বৈশিষ্ট্যগুলি ঘোষিত করা কোনও প্রোগ্রামগতভাবে তৈরি কার্ডভিউ, বা কাস্টম বিন্যাস থেকে তৈরি একটির জন্য কাজ করে না বলে মনে হয় (এমনকি যদি রুট ভিউটি কার্ডভিউ বা মার্জ উপাদানটি ব্যবহৃত হয়), সুতরাং সেগুলি প্রোগ্রামের মতো এমনভাবে সেট করতে হবে:

private class MadeUpCardViewHolder extends RecyclerView.ViewHolder {
    private MadeUpCardView cardView;

    public MadeUpCardViewHolder(View v){
        super(v);

        this.cardView = (MadeUpCardView)v;

        // Declaring in XML Layout doesn't seem to work in RecyclerViews
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int[] attrs = new int[]{R.attr.selectableItemBackground};
            TypedArray typedArray = context.obtainStyledAttributes(attrs);
            int selectableItemBackground = typedArray.getResourceId(0, 0);
            typedArray.recycle();

            this.cardView.setForeground(context.getDrawable(selectableItemBackground));
            this.cardView.setClickable(true);
        }
    }
}

অংশটির জন্য এই উত্তরটি যেখানে MadeupCardView extends CardViewকুডোস ।TypedArray


0
  android:foreground="?android:attr/selectableItemBackgroundBorderless"
   android:clickable="true"
   android:focusable="true"

শুধুমাত্র এপিআই 21 কাজ করছেন এবং এটি ব্যবহার না করে এই তালিকার সারি কার্ড ভিউ ব্যবহার করবেন না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.