কার্ডভিউ কর্নার ব্যাসার্ধ


95

কার্ডভিউয়ের শীর্ষে কোণার ব্যাসার্ধের কোনও উপায় আছে কি?

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardCornerRadius="10dp"
    >

উত্তর:


119

আপনি অ্যান্ড্রয়েড CardViewক্লাসটি প্রসারিত করার চেষ্টা না করলে আপনি সেই বৈশিষ্ট্যটি কাস্টমাইজ করতে পারবেন না XML

তবুও, সেই প্রভাবটি পাওয়ার একটি উপায় রয়েছে।

CardViewঅন্যটির অভ্যন্তরে কোনও স্থান রাখুন CardViewএবং আপনার বাহিরে স্বচ্ছ পটভূমি প্রয়োগ করুন CardViewএবং এর কোণার ব্যাসার্ধ ( "cornerRadios = 0dp") সরিয়ে দিন। CardViewউদাহরণস্বরূপ আপনার অভ্যন্তরের একটি কোণার রেডিয়াসের মান থাকবে 3 ডিপি। তারপরে আপনার অভ্যন্তরে মার্জিনটপ প্রয়োগ করুন CardView, সুতরাং এর নীচের সীমানা বাইরের দ্বারা কেটে যাবে CardView। এইভাবে, আপনার অভ্যন্তরের নীচের কোণার ব্যাসার্ধটি CardViewলুকিয়ে থাকবে।

এক্সএমএল কোডটি নিম্নলিখিত:

 <android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view_outer"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_gravity="center"
    card_view:cardBackgroundColor="@android:color/transparent"
    card_view:cardCornerRadius="0dp"
    card_view:cardElevation="3dp" >

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view_inner"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:layout_marginTop="3dp"
        card_view:cardBackgroundColor="@color/green"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="0dp" >
    </android.support.v7.widget.CardView>
</android.support.v7.widget.CardView>

এবং ভিজ্যুয়াল এফেক্টটি নিম্নলিখিত:

কেবল শীর্ষে গোলাকার কোণগুলির সাথে কার্ডভিউ

আপনার সামগ্রীটি সর্বদা আপনার অভ্যন্তরে রাখুন CardView। আপনার বাইরের কার্ডভিউ কেবলমাত্র অভ্যন্তরের নীচের গোলাকার কোণগুলি "আড়াল" করার উদ্দেশ্যে কাজ করে CardView


8
নোট করুন ছায়াটি ভুল (নীচের কোণার ছায়াগুলি এখনও বৃত্তাকার) এবং অগ্রভাগ নির্বাচক আরও লক্ষণীয়ভাবে ভুল হবে।
আতাউলম

আমি মনে করি ভাট বর্ণনা সহজ উপায় @shreedhar উত্তম
Matei সুইকা

বলুন, কোনও ধারণা যা কার্ডকার্নারডিয়াসের জন্য ডিফল্ট মান? এটা কি 4 ডিপি?
অ্যান্ড্রয়েড বিকাশকারী

আমি নিশ্চিত নই কেন সবাই এটিকে উত্তর হিসাবে চিহ্নিত করেছে। এটি সঠিক উত্তর নয়। আমি এটি চেষ্টা করেছিলাম, তবে এটি যেমন হওয়া উচিত তেমন কাজ করছে না।
ভিসিয়াল ভার্গিজ

42
dependencies: compile 'com.android.support:cardview-v7:23.1.1'

<android.support.v7.widget.CardView
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:elevation="12dp"
    android:id="@+id/view2"
    app:cardCornerRadius="40dp"
    android:layout_centerHorizontal="true"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9">
    <ImageView
        android:layout_height="80dp"
        android:layout_width="match_parent"
        android:id="@+id/imageView1"
        android:src="@drawable/Your_image"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">
    </ImageView>
</android.support.v7.widget.CardView>

8
এই ব্লক কোডটি কী করে আপনি ব্যাখ্যা করতে পারেন? আমি এক্সএমএল সম্পত্তি সম্পর্কে ব্যাখ্যা সম্পদ এটি মনে করতে পারে না innerRadius, shapeএবংthicknessRatio
atjua

4
শুধুমাত্র app:cardCornerRadius="40dp"খুব কাজ করবে।
রুমিত প্যাটেল

28

আপনি MaterialCardঅফিসিয়াল উপাদান উপাদান লাইব্রেরি অন্তর্ভুক্ত মান ব্যবহার করতে পারেন ।

আপনার বিন্যাসে ব্যবহার করুন:

<com.google.android.material.card.MaterialCardView
        style="@style/MyCardView"
        ...>

আপনার স্টাইলে shapeAppearanceOverlayআকৃতিটি কাস্টমাইজ করতে বৈশিষ্ট্যটি ব্যবহার করুন (ডিফল্ট কোণার ব্যাসার্ধটি হ'ল 4dp)

  <style name="MyCardView" parent="@style/Widget.MaterialComponents.CardView">
    <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MaterialCardView.Cut</item>
  </style>


  <style name="ShapeAppearanceOverlay.MaterialCardView.Cut" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSizeTopRight">8dp</item>
    <item name="cornerSizeTopLeft">8dp</item>
    <item name="cornerSizeBottomRight">0dp</item>
    <item name="cornerSizeBottomLeft">0dp</item>
  </style>

আপনি এটি ব্যবহার করতে পারেন:

<com.google.android.material.card.MaterialCardView
     app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Cut"
     ...>

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


এটি ট্যাবলআউট সাথে কাজ করছে না। আমার কোণার ট্যাবগুলি বৃত্তাকার নয়। আমার প্রয়োজনীয়তা হল ট্যাবগুলির কেবল শীর্ষ কোণগুলি বৃত্তাকার হওয়া উচিত যেখানে নীচের মতো বর্গাকার থাকতে হবে। আপনি এই আমাকে সাহায্য করতে পারেন?
তারা

4
আপনি যদি কেবলমাত্র এটি কোনও একক উপাদানটিতে প্রয়োগ করেন তবে আপনি কাস্টম শৈলীর প্রয়োজন ছাড়াই আকৃতির উপস্থিতি ওভারলে সরাসরি এক্সএমএলে প্রয়োগ করতে পারেন। app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Cut"
আফিয়ান

8

কার্ডটি যখন পর্দার একেবারে নীচে থাকে তখন এটি কীভাবে অর্জন করা যায় তার একটি উদাহরণ রয়েছে। কারও যদি এই ধরণের সমস্যা হয় তবে সে রকম কিছু করুন:

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="-5dp"
    card_view:cardCornerRadius="4dp">

    <SomeView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp">

    </SomeView>

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

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


6

আপনি এই অঙ্কনযোগ্য এক্সএমএল ব্যবহার করতে পারেন এবং কার্ডভিউতে ব্যাকগ্রাউন্ড হিসাবে সেট করতে পারেন:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffffff"/>

    <stroke android:width="1dp"
        android:color="#ff000000"
        />

    <padding android:left="1dp"
        android:top="1dp"
        android:right="1dp"
        android:bottom="1dp"
        />

    <corners 
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp"/>
</shape>

এই অভ্যাসটি কার্ড ভিউয়ের সাথে কাজ করবে না আপনাকে একটি লেআউট গ্রহণ করা দরকার ie লিনিয়ার বা রিলেটিভ এবং এটিতে পটভূমি সেট করুন। তাহলে এটি কাজ করবে।
সুরেন্দ্র কুমার

4
তবে তারপরে ছায়ার প্রভাব সম্পর্কে কী হবে?
রবি রাজপুত

তার জন্য আপনি স্তর তালিকা ব্যবহার করতে পারেন। এই লিঙ্কটি পরীক্ষা করুন
সুরেন্দ্র কুমার

@ সুরেন্দ্রকুমার আরে ভাই ভাই ভাইই: ডি: ডি
অভিষেক

6

আমি কাস্টম বৃত্তাকার কোণার অবস্থানের জন্য একটি আকর্ষণীয় lib লিখেছি, এটি দেখতে এরকম দেখাচ্ছে:

উদাহরণ.png

আপনি এই লিব এখানে পেতে পারেন:

https://github.com/mthli/Slice


2

আপনার 2 টি জিনিস করা দরকার:

1) setPreventCornerOverlap(false)আপনার কার্ডভিউতে কল করুন।

2) কার্ডভিউয়ের ভিতরে বৃত্তাকার চিত্র দেখুন

আপনার চিত্র দেখার জন্য গোল করার বিষয়ে আমার একই সমস্যা ছিল তাই আমি একটি লাইব্রেরি তৈরি করেছিলাম যা আপনি প্রতিটি কোণায় আলাদা আলাদা রেডিয়াই সেট করতে পারেন । অবশেষে আমি নীচের মত যা চাই ফলাফল পেয়েছি।

https://github.com/pungrue26/SelectableRoundedImageView

কার্ডভিউয়ের ভিতরে বৃত্তাকার ইমেজভিউ


4
এবং এভাবেই আপনি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিকে
আইওএস এ

0

আপনি গ্রন্থাগারটি ব্যবহার করতে পারেন: OptionRoundCardview

এখানে চিত্র বর্ণনা লিখুন


এটি গোলাকার কোণগুলি দেখায় না ... আমি এপিআই> 23
রবি রাজপুত

যথেষ্ট মার্জিন স্পেস যুক্ত করবেন?
কিন্মিয়াও

কোনও সন্তানের দর্শনগুলি ম্যাচ পিতামাতার নয়
রবি রাজপুত

মার্জিন আছে
রবি রাজপুত

এই গ্রন্থাগারটি ব্যাকগ্রাউন্ড-রঙ অ্যাপ্লিকেশনটির সাথে কাজ করছে না: optRoundCardBackground रंग = "@ রঙ / ধূসর" এটি কোণার ব্যাসার্ধের প্রভাবগুলি সরিয়ে দেয়
কিশান দোঙ্গা

0

আপনি আপনার চিত্রভিউকে একটি কার্ডভিউয়ের মধ্যে রাখতে পারেন এবং সেই বৈশিষ্ট্যগুলি চিত্র ভিউতে যুক্ত করতে পারেন:

android:cropToPadding="true"
android:paddingBottom="15dp"

এইভাবে আপনি গোলাকার নীচের কোণটি থেকে মুক্তি পাবেন, তবে মনে রাখবেন যে এটি আপনার চিত্রের একটি ছোট অংশ কেটে ফেলার দামে আসে।


0

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

আমার জন্য যা কাজ করেছে বলে মনে হচ্ছে তা এখানে:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="#F9F9F9">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="@drawable/profile_bg"/>

    </androidx.cardview.widget.CardView>

    <androidx.cardview.widget.CardView
        android:id="@+id/cvProfileHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="32dp">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="280dp"
            android:orientation="vertical"
            android:background="@drawable/profile_bg"
            android:id="@+id/llProfileHeader"
            android:gravity="center_horizontal">

            <!--Enter your code here-->

        </LinearLayout>
    
    </androidx.cardview.widget.CardView>

</RelativeLayout>

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

শীর্ষে গোলাকার কোণগুলি পেতে এবং নীচে নিয়মিতগুলি পেতে আপনি এর বিপরীতটি করতে পারেন, যেমন প্রথম কার্ডভিউটিতে গোলাকার কোণ এবং দ্বিতীয় কার্ডভিউটিতে নিয়মিত কোণ থাকতে পারে।


-1

অ্যান্ড্রয়েড স্টুডিওতে এটি অর্জনের সহজ উপায় নীচে ব্যাখ্যা করা হয়েছে:

পদক্ষেপ 1:
নির্ভরতাগুলিতে রেখার নিচে লিখুন build.gradle:

compile 'com.android.support:cardview-v7:+'

পদক্ষেপ 2:
সংহত করার জন্য আপনার এক্সএমএল ফাইলে কোডের নীচে অনুলিপি করুন CardView

জন্য cardCornerRadiusকাজ, পিতা বা মাতা লেআউট লাইনের নিচে অন্তর্ভুক্ত করা নিশ্চিত করুন দয়া করে: xmlns:card_view="http://schemas.android.com/apk/res-auto"

এবং সম্পত্তি card_viewব্যবহারের জন্য নেমস্পেস হিসাবে ব্যবহার মনে রাখবেন cardCornerRadius

উদাহরণ স্বরূপ : card_view:cardCornerRadius="4dp"

এক্সএমএল কোড:

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view_outer"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_gravity="center"
    card_view:cardBackgroundColor="@android:color/transparent"
    card_view:cardCornerRadius="0dp"
    card_view:cardElevation="3dp" >

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view_inner"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:layout_marginTop="3dp"
        card_view:cardBackgroundColor="@color/green"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="0dp" >
    </android.support.v7.widget.CardView>

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

4
তিনি কেবল এটি শীর্ষে চান।
হাইজেনবার্গ

4
যদিও এটি এই প্রশ্নের উত্তর নয়, এটি আমাকে অনেক সাহায্য করেছে, নামের জায়গাগুলি সহ একটি মনমুগ্ধকর সমস্যা খুঁজে পেতে! :)
খণ্ডিত

4
এটি নির্দিষ্ট প্রশ্নের উত্তর নয় তবে এটি অনেক ব্যবহারকারীকে সহায়তা করেছে।
মিথ 12

-1

এটি অর্জনের একটি সহজ উপায় হ'ল:

1. বৃত্তাকার কোণার সাথে একটি কাস্টম ব্যাকগ্রাউন্ড রিসোর্স (আয়তক্ষেত্রের আকারের মতো) তৈরি করুন।

কমান্ডটি ব্যবহার করে এই কাস্টম পটভূমিটি সেট করুন -

cardView = view.findViewById(R.id.card_view2);
cardView.setBackgroundResource(R.drawable.card_view_bg);

এটি আমার জন্য কাজ করেছে।

XMLবিন্যাস আমি শীর্ষ দিয়ে তৈরি বাম এবং নীচের অংশে ডানদিকে ব্যাসার্ধ।

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:topLeftRadius="18dp" android:bottomRightRadius="18dp" />
</shape>

আপনার ক্ষেত্রে আপনাকে শীর্ষস্থানীয় রেডিয়াসের পাশাপাশি শীর্ষ রাইটেরিয়াসও পরিবর্তন করতে হবে।

আপনার যদি এমন একটি বিন্যাস থাকে যা কার্ড ভিউটির কোণগুলির সাথে ওভারল্যাপ হয়ে থাকে এবং অন্যরকম রঙ থাকতে পারে, তবে আপনার লেআউটের জন্য পৃথক ব্যাকগ্রাউন্ড রিসোর্স ফাইলের প্রয়োজন হতে পারে এবং xML এ আপনার ব্যাকগ্রাউন্ড রিসোর্সটি আপনার বিন্যাসে সেট করতে পারে।

আমি উপরোক্ত পদ্ধতিটি পরীক্ষা করে দেখেছি। আশা করি এটি আপনাকে সহায়তা করবে।


-2

আপনি যদি কার্ডের পটভূমিটিকে প্রোগ্রামগতভাবে সেট করে থাকেন তবে আপনি ব্যবহার করছেন cardView.setCardBackgroundColor()এবং না cardView.setBackgroundColor()এবং ব্যবহার নিশ্চিত করে নিশ্চিত করুনapp:cardPreventCornerOverlap="true" করুন এবং কার্ডভিউ.এক্সএমএল হয়ে নিন। এটা আমার জন্য এটি স্থির।

বিটিডব্লিউ, উপরের কোডটি (উদ্ধৃতিগুলিতে) কোটলিনে রয়েছে এবং জাভা নয়। আপনি জাভা ব্যবহার করছেন তবে জাভা সমতুল্য ব্যবহার করুন।

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