এক্সএমএল মাধ্যমে বিজ্ঞপ্তি মধ্যে চিত্র দেখুন


201

আমি আমার থেকে কোনও চিত্র ImageViewএকটি সীমানার সাথে বৃত্তাকার হতে চাই।

আমি অনুসন্ধান করেছি কিন্তু কোনও দরকারী তথ্য খুঁজে পেলাম না (যা চেষ্টা করেছি তা কাজ করে নি)।

আমি কীভাবে এক্সএমএল এর মাধ্যমে এটি অর্জন করতে পারি: ImageViewনির্দিষ্ট এসসিআর দিয়ে একটি তৈরি করুন এবং এটি একটি বর্ডার দিয়ে বৃত্তাকার তৈরি করুন ?


জাভা কোডটিতে ইমেজভিউয়ের এসআরসি কীভাবে পরিবর্তন করবেন?
চেনজংপু

এখানে সহজ সরল সমাধান stackoverflow.com/a/28096369/2162226 - সমস্ত জাভাতে, সুতরাং আপনি রানটাইমের চিত্রগুলিতে এই বিন্যাসটি গতিশীলভাবে প্রয়োগ করতে পারেন
জেন বো

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

উত্তর:


221

আপনি সাদা সীমানা এবং আকারের সাথে স্বচ্ছ সামগ্রী সহ একটি সাধারণ বৃত্ত তৈরি করতে পারেন।

// res/drawable/circle.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9"
    android:useLevel="false" >
    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="10dp"
        android:color="@android:color/white" />
</shape>

তারপরে একটি স্তর তালিকা আঁকুনযোগ্য করে তুলুন এবং এটিকে আপনার চিত্র দর্শনের ব্যাকগ্রাউন্ড হিসাবে রাখুন।

// res/drawable/img.xml

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

    <item android:drawable="@drawable/circle"/>    
    <item android:drawable="@drawable/ic_launcher"/>

</layer-list>

এবং এটিকে আপনার চিত্র দর্শনে ব্যাকগ্রাউন্ড হিসাবে রাখুন।

   <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/img"/>

আপনার এমন কিছু থাকবে।

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


13
এবং তারপরে আমি সেই চিত্রটি আমার চিত্র দর্শনের পটভূমিতে সেট করেছি? আমি চেষ্টা করেছি কিন্তু কাজ হয়নি। আমার চিত্রটি এখনও আয়তক্ষেত্রাকার :(
ব্যবহারকারীর 3050910

3
হ্যাঁ, এক্সএমএল ব্যবহার করা, কারণ জাভা কোড ব্যবহার করা মোবাইলের জন্য খুব ব্যয়বহুল। এই কোডটি দিয়ে এটি কেবল আমার চিত্রের পিছনে একটি বৃত্ত প্রদর্শিত হবে, চিত্রটি নিজেই একটি বৃত্ত নয়। আমার ধারনা সীমান্তের জন্য, আমি চিত্রটি আমার কাছে
এটির

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

79
আমি যদি এইভাবে অবলম্বন করি তবে জাভা কোডে চিত্রকল্পের এসআরসি কীভাবে পরিবর্তন করব?
চেনজংপু

3
অকেজো, হার্ডকর্ডযুক্ত আইএমজি উত্স, আমি কোড দিয়ে পরিবর্তন করতে চাই
user924

290

এটি আমি ডিজাইনের সবচেয়ে সহজ উপায়। এটা চেষ্টা কর.

dependencies: compile 'com.android.support:appcompat-v7:23.1.1'
              compile 'com.android.support:design:23.1.1'
              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>

আপনি যদি ললিপপের উপরে অ্যান্ড্রয়েড সংস্করণগুলিতে কাজ করছেন

<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">
<ImageView
    android:layout_height="80dp"
    android:layout_width="match_parent"
    android:id="@+id/imageView1"
    android:src="@drawable/YOUR_IMAGE"
    android:scaleType="centerCrop"/>
  </android.support.v7.widget.CardView>

রাউন্ড ইমেজভিউতে সীমানা যুক্ত করা হচ্ছে - সর্বশেষ সংস্করণ

এটিকে অভ্যন্তরের চেয়ে কিছুটা বড় করে অন্য কার্ডভিউ দিয়ে মুড়িয়ে দিন এবং আপনার বৃত্তাকার চিত্রটিতে সীমানা যুক্ত করতে এর পটভূমি রঙ সেট করুন। সীমানার পুরুত্ব বাড়ানোর জন্য আপনি বাইরের কার্ডভিউয়ের আকার বাড়িয়ে তুলতে পারেন।

<androidx.cardview.widget.CardView
  android:layout_width="155dp"
  android:layout_height="155dp"
  app:cardCornerRadius="250dp"
  app:cardBackgroundColor="@color/white">

    <androidx.cardview.widget.CardView
      android:layout_width="150dp"
      android:layout_height="150dp"
      app:cardCornerRadius="250dp"
      android:layout_gravity="center">

        <ImageView
          android:layout_width="150dp"
          android:layout_height="150dp"
          android:src="@drawable/default_user"
          android:scaleType="centerCrop"/>

   </androidx.cardview.widget.CardView>

 </androidx.cardview.widget.CardView>

1
এর জন্য ধন্যবাদ. মেমরির ব্যবহার সহজ এবং সহজ। আমি এখনও অবধি চেষ্টা করা লাইব্রেরিগুলি রিসাইক্লারভিউ আইটেমগুলিতে কাস্টম ভিউগুলি ব্যবহার করার সময় সমস্তই Oomexception দেয়।
সিওবিবি

11
এটি ব্যবহারের চেষ্টা করা হয়েছে দেখে মনে হচ্ছে এটি 5.0 এর নীচে অ্যান্ড্রয়েডের সাথে কাজ করে না। চিত্রের দৃশ্যটি বিজ্ঞপ্তিযুক্ত হলেও চিত্রগুলি বর্গক্ষেত্রের আকারের চেয়ে ছোট, ভয়ঙ্কর দেখাচ্ছে। যেকোনো পরামর্শ? 5.0 এবং উপরের ভাল কাজ করে।
কাপ

6
আমার চিত্রটি এই পদ্ধতির সাথে কার্ডভিউয়ের সাথে খাপ খায় না
হেন্দ্র অ্যাংগ্রিয়ান

21
এটি কার্ডভিউটিকে বৃত্তাকার করে তোলে তবে চিত্রটি নীচে বর্গক্ষেত্র
কবুতু 178

5
ধন্যবাদ, এখানে কীটি সঠিক বৃত্ত তৈরি করতে কার্ড ব্যাসার্ধের প্রস্থ এবং উচ্চতার অর্ধেক হতে হবে।
বিশ্রুতি

124

আমি আশা করি এটা তোমাকে সাহায্য করবে।

1) সার্কেলআইমেজভিউ

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

 <de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"/>

বাস্তবায়ন ভুলে যাবেন না: গ্রেডল স্ক্রিপ্টস> বিল্ড.gradle (মডিউল: অ্যাপ)> নির্ভরতা

     implementation 'de.hdodenhof:circleimageview:3.1.0'   

সম্পূর্ণ বিবরণের জন্য দয়া করে এখানে চেক করুন: উত্স এখানে।

2) সার্কুলারআইমেজভিউ

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

<com.mikhaellopez.circularimageview.CircularImageView
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:src="@drawable/image"
    app:civ_border_color="#3f51b5"
    app:civ_border_width="4dp"
    app:civ_shadow="true"
    app:civ_shadow_radius="10"
    app:civ_shadow_color="#3f51b5"/>

বাস্তবায়ন ভুলে যাবেন না: গ্রেডল স্ক্রিপ্টস> বিল্ড.gradle (মডিউল: অ্যাপ)> নির্ভরতা

     implementation 'com.mikhaellopez:circularimageview:4.2.0'   

সম্পূর্ণ বিবরণের জন্য দয়া করে এখানে চেক করুন: উত্স এখানে।


1
ধূসর রঙের অংশটি কীভাবে সাদা করতে হবে?
জন জো

2
এটি পোস্ট হওয়ার পরে একটি আপডেট হয়েছে। সীমানা_ রঙ এবং বর্ডার_ প্রস্থের নতুন নামকরণ করা হয়েছে। আরও তথ্যের জন্য গিথুব
छवि

স্কেল টাইপ সমর্থন করে না। :(
খান

হাই, এসআরসি-তে সেট করার সময় এটি
ঠিকঠাক

@ এরিম আপনাকে গ্রেড ফাইলটিতে কেবল 'ডি.ডি.ডোডনহোফ: সার্কেলমেজভিউ: 1.3.0' সংকলন করা দরকার জাভা কোডের প্রয়োজন নেই।
সঞ্জয় মাঙ্গারোলিয়া

46

সাহায্যে পিছলে পড়া গ্রন্থাগারের RoundedBitmapDrawableFactory বর্গ তা অর্জন করা সহজ। আপনার বৃত্তাকার স্থানধারক চিত্র তৈরি করার প্রয়োজন হতে পারে।

গ্লাইড ভি 4:

Glide.with(context).load(url).apply(RequestOptions.circleCropTransform()).into(imageView);

গ্লাইড ভি 3:

    Glide.with(context)
        .load(imgUrl)
        .asBitmap()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.placeholder)
        .into(new BitmapImageViewTarget(imgProfilePicture) {
            @Override
            protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(context.getResources(),
                        Bitmap.createScaledBitmap(resource, 50, 50, false));
                drawable.setCircular(true);
                imgProfilePicture.setImageDrawable(drawable);
            }
        });

জন্য পিকাসো RoundedTransformation , এই একটি সত্যিই মহান সমাধান যে হয় উপরে বা নীচে প্রান্ত এ ইমেজ rounding একটি অতিরিক্ত বিকল্প দেয়।


2
আপনি এই উদাহরণের জন্য গ্লাইডের কোন সংস্করণ ব্যবহার করছেন তা নিশ্চিত নন তবে ভি 4.0.0 দিয়ে আপনি কেবল রাউন্ডবেড বিটম্যাপড্রেইবলের পরিবর্তে তাদের অনুরোধগুলি ব্যবহার করতে পারেন: Glide.with(context).load(imgUrl).apply(new RequestOptions().centerCrop()) .into(imageView)
ইউজিন ব্রুসভ

2
মানে না; গ্লাইড.উইথ (কনটেক্সট)
অ্যান্ড্রয়েডজ

3
সংস্করণ 4.6.1 এর সাথে.apply(RequestOptions.circleCropTransform())
পাভেল

2
পিছলান v.4 সালে যদি GlideAppএকটি অ্যাপ্লিকেশন কনফিগার হয়: GlideApp.with(this).load(url).circleCrop().into(imageView);
কুলমাইন্ড

1
আমি বিশ্বাস করতে পারি না যে এটি এত সহজে মাথাব্যথা ছাড়াই কাজ করেছে
আজেলি

30

আপনি যদি srcগুণটি ব্যবহার করছেন তবে উপরের পদ্ধতিগুলি কাজ করছে বলে মনে হচ্ছে না । আমি যা করেছি তা হ'ল একটি ফ্রেমের বিন্যাসের মধ্যে দুটি এর চেয়ে বেশি উপরে এইরকম চিত্র রাখা:

<FrameLayout android:id="@+id/frame"
             android:layout_width="40dp"
             android:layout_height="40dp">

    <ImageView android:id="@+id/pic"
               android:layout_width="40dp"
               android:layout_height="40dp"
               android:src="@drawable/my_picture" />

    <ImageView android:id="@+id/circle_crop"
               android:layout_width="40dp"
               android:layout_height="40dp"
               android:src="@drawable/circle_crop" />

</FrameLayout>

কেবল আপনার অঙ্কনযোগ্য ফোল্ডারে একটি বৃত্তাকার_ক্রপ.পিএনজি রাখুন যা আপনার চিত্রের আকারগুলির আকারে (আমার ক্ষেত্রে একটি বর্গক্ষেত্র) একটি সাদা ব্যাকগ্রাউন্ড এবং কেন্দ্রে একটি স্বচ্ছ বৃত্ত সহ। বর্গক্ষেত্র চিত্রদর্শন চাইলে আপনি এই চিত্রটি ব্যবহার করতে পারেন।

বৃত্তাকার চিত্র

কেবল উপরের ছবিটি ডাউনলোড করুন।


2
সব থেকে ভালো সমাধান! শেষ ঘন্টা. বিটম্যাপ পরিবর্তন মেমোরি সমস্যা
itzhar

এই নমুনা ইমেজ সাদা তাই হ্যাঁ। তবে আপনি যে কোনও রঙে নিজের ইমেজ তৈরি করতে পারেন বা এই চিত্রটি ডাউনলোড করতে পারেন এবং কেবল এটির রঙ পরিবর্তন করতে পারেন।
জ্যোতমন সিং 13

আপনি কি দয়া করে ব্যাখ্যা করতে পারেন আমি কীভাবে চিত্রটির রঙ কালো করে তুলব? এটি কি অ্যান্ড্রয়েড স্টুডিওর ভিতরে থেকে করা যেতে পারে বা আমার কোনও বাহ্যিক সরঞ্জামের প্রয়োজন (এটি দেখতে পাচ্ছি আমি চিত্র তৈরির সাথে পরিচিত নই)
Zvi

অ্যান্ড্রয়েড স্টুডিওর ভিতরে থেকে নয়। আপনার ফটোশপের মতো কিছু দরকার হবে। এই ফটোটি নিজেই ফটোশপ দিয়ে তৈরি হয়েছিল
জ্যোতমন সিং ২।

1
আপনি কেবলমাত্র চেনাশোনাটিকে অঙ্কনযোগ্য রঙিন ফিল্টারটি দিতে পারেন: বৃত্তক্রপ.সেটকলারফিল্টার (getRes উত্স () এইভাবে আপনার যে কোনও রঙের একক বৃত্ত আঁকতে সক্ষম হতে পারে এবং যেকোন পটভূমিতে আপনার অ্যাপ্লিকেশনটিতে যে কোনও জায়গায় এটি পুনরায় ব্যবহার করতে পারে। প্রতিটি সময় উপযুক্ত রঙের সংস্থান সহ একটি রঙিন ফিল্টার সেট করুন।
mjp66

19

এটি করার সহজ উপায়গুলির মধ্যে একটি হল নিম্নলিখিত কোডটি ব্যবহার করুন:

নির্ভরতা

dependencies {
    ...
    compile 'de.hdodenhof:circleimageview:2.1.0'      // use this or use the latest compile version. In case u get bug.
}

এক্সএমএল কোড

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"             //  here u can adjust the width 
    android:layout_height="96dp"            //  here u can adjust the height 
    android:src="@drawable/profile"         //  here u can change the image 
    app:civ_border_width="2dp"              //  here u can adjust the border of the circle.  
    app:civ_border_color="#FF000000"/>      //  here u can adjust the border color

স্ক্রীনশট:

স্ক্রিনশট

সূত্র: বিজ্ঞপ্তি চিত্রভিউ গিটহাব সংগ্রহশালা

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


6
স্কেল টাইপ সমর্থন করে না। :(
খান

6

এটি কৌশলটি করবে:

rectangle.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent" />
    <padding android:bottom="-14dp" android:left="-14dp" android:right="-14dp" android:top="-14dp" />

</shape>

circle.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="oval"

    android:useLevel="false" >
    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="15dp"
        android:color="@color/verification_contact_background" />

</shape>

প্রোফাইল_image.xML (স্তর তালিকা)

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

    <item android:drawable="@drawable/rectangle" />
    <item android:drawable="@drawable/circle"/>

</layer-list>

আপনার লেআউট

 <ImageView
        android:id="@+id/profile_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/default_org"
        android:src="@drawable/profile_image"/>

ডিফল্ট কি?
জন জো

এটি যে কোনও স্থানধারক চিত্র হতে পারে
নিধি

এই ক্ষেত্রে, আয়তক্ষেত্রাকার মাত্রায় কোনও চিত্রের প্রান্তগুলি বৃত্তের সীমানা অতিক্রম করবে। বৃত্তের ভিতরে আমি প্রতিটি চিত্র, প্রতিটি মাত্রা এবং আকারে ঠিক কীভাবে রাখতে পারি?
inverted_index

6

কেবলমাত্র ShapeableImageViewউপাদান উপাদান লাইব্রেরি দ্বারা সরবরাহিত ব্যবহার করুন ।
সামথিগের মতো:

<com.google.android.material.imageview.ShapeableImageView
    app:shapeAppearanceOverlay="@style/roundedImageViewRounded"
    app:strokeColor="@color/....."
    app:strokeWidth="1dp"
    ...
    />

সঙ্গে:

  <style name="roundedImageViewRounded">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

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

দ্রষ্টব্য: এটির জন্য কমপক্ষে সংস্করণ প্রয়োজন 1.2.0-alpha03


5

আপনি কেবল কোনও বাহ্যিক লাইব্রেরি ছাড়াই কার্ডভিউ ব্যবহার করতে পারেন

  <androidx.cardview.widget.CardView
                    android:id="@+id/roundCardView"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_centerHorizontal="true"
                    android:elevation="0dp"
                    app:cardCornerRadius="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/profile" />
</androidx.cardview.widget.CardView>

4

আমি নীচে "রিং" এর পরিবর্তে আকৃতি = "ওভাল" ব্যবহার করি। এটা আমার জন্য কাজ করেছে। চিত্রটি সীমার মধ্যে রাখতে, আমি ব্যবহার করি <padding>এবং <adjustViewBounds>এটি আমার মধ্যে সত্য হয়ে যায় <ImageView>। আমি 200x200 px অবধি 50 x 50 px এর মধ্যে আকারের চিত্র দিয়ে চেষ্টা করেছি।


আপনি নিম্নলিখিতগুলিও যুক্ত করতে পারেনandroid:scaleType="fitCenter"
আইহ্যায়েত

2

@ জ্যোতমন সিংহ, উত্তরটি খুব ভাল (দৃ background় ব্যাকগ্রাউন্ডের জন্য), তাই আমি ভেক্টর ড্রয়িং ভাগ করে এটিকে বাড়িয়ে তুলতে চাই যা আপনার প্রয়োজনের জন্য পুনরায় রঙিন হতে পারে, এটিও সুবিধামত যেহেতু ভেক্টর এক-পিস আকৃতিটি খুব মাপসই হয়।

এটি আয়তক্ষেত্র-বৃত্তের আকার (@ অঙ্কনযোগ্য / আকৃতি_মোলা_প্রোফাইল_পিক):

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="284"
    android:viewportHeight="284"
    android:width="284dp"
    android:height="284dp">
    <path
        android:pathData="M0 142L0 0l142 0 142 0 0 142 0 142 -142 0 -142 0zm165 137.34231c26.06742 -4.1212 52.67405 -17.543 72.66855 -36.65787 11.82805 -11.30768 20.55487 -22.85153 27.7633 -36.72531C290.23789 158.21592 285.62874 101.14121 253.48951 58.078079 217.58149 9.9651706 154.68849 -10.125717 98.348685 8.5190299 48.695824 24.95084 12.527764 67.047123 3.437787 118.98655 1.4806194 130.16966 1.511302 152.96723 3.4990422 164.5 12.168375 214.79902 47.646316 256.70775 96 273.76783c21.72002 7.66322 44.26673 9.48476 69 5.57448z"
        android:fillColor="#ffffff" /> // you can change frame color
</vector>

ব্যবহার একই:

<FrameLayout
        android:layout_width="70dp"
        android:layout_height="70dp">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/YOUR_PICTURE" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/shape_round_profile_pic"/>

    </FrameLayout>

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

উপরে @ জ্যোতমন সিং এর উত্তর দেখুন Please এটি আমার পক্ষে সহায়ক ছিল, তাই আমি এটি কিছুটা বাড়িয়েছি। চিত্র ক্রপ করতে আপনি ব্যবহার করতে পারেন:GlideApp.with(getApplicationContext()).asBitmap().load(profilePhotoUrl) .circleCrop()
একর

বৃত্ত ইন-আয়তক্ষেত্রাকার আকৃতির জন্য আপনাকে ধন্যবাদ! ঠিক আমার কী দরকার!
siralexsir88

2

কোডের এই লাইনগুলি কেবল ব্যবহার করুন এবং আপনার কাজটি সম্পন্ন হয়েছে:

<de.hdodenhof.circleimageview.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:clickable="true"
            app:civ_border_width="3dp"
            app:civ_border_color="#FFFFFFFF"
            android:id="@+id/profile"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_below="@+id/header_cover_image"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="-130dp"
            android:elevation="5dp"
            android:padding="20dp"
            android:scaleType="centerCrop"
            android:src="@drawable/profilemain" />

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

আমদানি করতে ভুলবেন না:

import de.hdodenhof.circleimageview.CircleImageView;

Build.gradle এ এই লাইব্রেরি যুক্ত করুন:

compile 'de.hdodenhof:circleimageview:2.1.0'

আপনার অবশ্যই জাভা ক্লাসে কিছু অনুপস্থিত হবে
জন জো

1

এটা চেষ্টা কর.

public class RoundedImageView extends android.support.v7.widget.AppCompatImageView {

    private int borderWidth = 4;
    private int viewWidth;
    private int viewHeight;
    private Bitmap image;
    private Paint paint;
    private Paint paintBorder;
    private BitmapShader shader;

    public RoundedImageView(Context context)
    {
        super(context);
        setup();
    }

    public RoundedImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        setup();
    }

    public RoundedImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        setup();
    }

    private void setup()
    {
        paint = new Paint();
        paint.setAntiAlias(true);

        paintBorder = new Paint();
        setBorderColor(Color.WHITE);
        paintBorder.setAntiAlias(true);
        this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);

        paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.WHITE);
    }

    public void setBorderWidth(int borderWidth)
    {
        this.borderWidth = borderWidth;
        this.invalidate();
    }

    public void setBorderColor(int borderColor)
    {
        if (paintBorder != null)
            paintBorder.setColor(borderColor);

        this.invalidate();
    }

    private void loadBitmap()
    {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();

        if (bitmapDrawable != null)
            image = bitmapDrawable.getBitmap();
    }

    @SuppressLint("DrawAllocation")
    @Override
    public void onDraw(Canvas canvas)
    {
        loadBitmap();

        if (image != null)
        {
            shader = new BitmapShader(Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
            paint.setShader(shader);
            int circleCenter = viewWidth / 2;
            canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder);
            canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint);
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int width = measureWidth(widthMeasureSpec);
        int height = measureHeight(heightMeasureSpec, widthMeasureSpec);

        viewWidth = width - (borderWidth * 2);
        viewHeight = height - (borderWidth * 2);

        setMeasuredDimension(width, height);
    }

    private int measureWidth(int measureSpec)
    {
        int result = 0;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);

        if (specMode == MeasureSpec.EXACTLY)
        {
            result = specSize;
        }
        else
        {
            // Measure the text
            result = viewWidth;
        }

        return result;
    }

    private int measureHeight(int measureSpecHeight, int measureSpecWidth)
    {
        int result = 0;
        int specMode = MeasureSpec.getMode(measureSpecHeight);
        int specSize = MeasureSpec.getSize(measureSpecHeight);

        if (specMode == MeasureSpec.EXACTLY)
        {
            result = specSize;
        }
        else
        {
            result = viewHeight;
        }

        return (result + 2);
     }
 }

এবং এই ইমেজভিউটি লেআউটে যেমন ব্যবহার করুন:

<com.app.Demo.RoundedImageView
     android:id="@+id/iv_profileImage"
     android:layout_width="70dp"
     android:layout_height="70dp"
     android:layout_centerHorizontal="true"
    />

1

আপনি যদি নিজের অ্যাপ্লিকেশনে মেটেরিয়াল ডিজাইন ব্যবহার করেন তবে এটি ব্যবহার করুন

<com.google.android.material.card.MaterialCardView
            android:layout_width="75dp"
            android:layout_height="75dp"
            app:cardCornerRadius="50dp"
            app:strokeWidth="1dp"
            app:strokeColor="@color/black">
            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/circular_image"
                android:scaleType="fitCenter"
                android:src="@drawable/your_img" />
        </com.google.android.material.card.MaterialCardView>

0

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

আপনার লেআউটে সার্কুলারআইমেজভিউ যুক্ত করা হচ্ছে

CircularImageView c=new CircularImageView(this,screen width,screen height,Bitmap myimage);
yourLayout.addView(c);**


public class CircularImageView extends android.support.v7.widget.AppCompatImageView  
{
    private final Context context;
    private final int width, height;
    private final Paint paint;
    private final Paint paintBorder,imagePaint;
    private final Bitmap bitmap2;
    private final Paint paint3;
    private Bitmap bitmap;
    private BitmapShader shader;
    private float radius = 4.0f;
    float x = 0.0f;
    float y = 8.0f;
    private float stroke;
    private float strokeWidth = 0.0f;
    private Bitmap bitmap3;
    private int corner_radius=50;


    public CircularImageView(Context context, int width, int height, Bitmap bitmap)     {
        super(context);
        this.context = context;
        this.width = width;
        this.height = height;

   //here "bitmap" is the square shape(width* width) scaled bitmap ..

        this.bitmap = bitmap;


        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);


        paint3=new Paint();
        paint3.setStyle(Paint.Style.STROKE);
        paint3.setColor(Color.WHITE);
        paint3.setAntiAlias(true);

        paintBorder = new Paint();
        imagePaint= new Paint();

        paintBorder.setColor(Color.WHITE);
        paintBorder.setAntiAlias(true);
        this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);


        this.bitmap2 = Bitmap.createScaledBitmap(bitmap, (bitmap.getWidth() - 40), (bitmap.getHeight() - 40), true);


        imagePaint.setAntiAlias(true);




        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        Shader b;
         if (bitmap3 != null)
            b = new BitmapShader(bitmap3, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
         else
            b = new BitmapShader(bitmap2, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        imagePaint.setShader(b);
        canvas.drawBitmap(maskedBitmap(), 20, 20, null);
    }

    private Bitmap maskedBitmap()
    {
        Bitmap l1 = Bitmap.createBitmap(width,width, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(l1);
        paintBorder.setShadowLayer(radius, x, y, Color.parseColor("#454645"));
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        final RectF rect = new RectF();
        rect.set(20, 20, bitmap2.getWidth(), bitmap2.getHeight());

        canvas.drawRoundRect(rect, corner_radius, corner_radius, paintBorder);

        canvas.drawRoundRect(rect, corner_radius, corner_radius, imagePaint);

        if (strokeWidth!=0.0f)
        {
            paint3.setStrokeWidth(strokeWidth);
            canvas.drawRoundRect(rect, corner_radius, corner_radius, paint3);
        }

         paint.setXfermode(null);
        return l1;
    }




     // use seekbar here, here you have to pass  "0 -- 250"  here corner radius will change 

    public void setCornerRadius(int corner_radius)
    {
        this.corner_radius = corner_radius;
        invalidate();
    }



    -------->use seekbar here, here you have to pass  "0 -- 10.0f"  here shadow radius will change 

    public void setShadow(float radius)
    {
        this.radius = radius;
        invalidate();
    }

   // use seekbar here, here you have to pass  "0 -- 10.0f"  here stroke size  will change 

    public void setStroke(float stroke)
    {
        this.strokeWidth = stroke;
        invalidate();
    }

    private Bitmap updateSat(Bitmap src, float settingSat)
    {

        int w = src.getWidth();
        int h = src.getHeight();

        Bitmap bitmapResult =
                Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvasResult = new Canvas(bitmapResult);
        Paint paint = new Paint();
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(settingSat);
        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(colorMatrix);
        paint.setColorFilter(filter);
        canvasResult.drawBitmap(src, 0, 0, paint);

        return bitmapResult;
    }




  // use seekbar here, here you have to pass  "0 -- 2.0f"  here saturation  will change 

    public void setSaturation(float sat)
    {
        System.out.println("qqqqqqqqqq            "+sat);
        bitmap3=updateSat(bitmap2, sat);

        invalidate();
    } 


}






        // Seekbar to change radius

                  radius_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            text_radius.setText(""+progress);
                            circularImageView.setCornerRadius(progress);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


     // Seekbar to change shadow

                    shadow_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            float f= 4+progress/10.0f;
                            text_shadow.setText(""+progress);
                            circularImageView.setShadow(f);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


           // Seekbar to change saturation

                    saturation_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            int progressSat = saturation_seekbar.getProgress();
                            float sat = (float) ((progressSat*4 / 100.0f)-1.0f);
                            circularImageView.setSaturation(sat);

                            text_saturation.setText(""+progressSat);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


    // Seekbar to change stroke

                    stroke_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            if (progress==0)
                            {
                                float f=(progress*10.0f/100.0f);
                                circularImageView.setStroke(f);
                            }
                            else
                            {
                                float f=(progress*10.0f/100.0f);
                                circularImageView.setStroke(f);
                            }

                            text_stroke.setText(""+progress);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });




             //radius seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="50"
                android:max="250"
                android:id="@+id/radius_seekbar"
                android:layout_height="wrap_content" />





          //saturation seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="50"
                android:max="100"
                android:id="@+id/saturation_seekbar"
                android:layout_height="wrap_content" />





    //shadow seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="0"
                android:max="100"
                android:id="@+id/shadow_seekbar"
                android:layout_height="wrap_content" />




         //stroke seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="0"
                android:max="100"
                android:id="@+id/stroke _seekbar"
                android:layout_height="wrap_content" />

0

প্রকৃতপক্ষে, গুগল কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করে সমর্থন লাইব্রেরি রাউন্ডডবিটম্যাপড্রেবলযোগ্য কারখানার ( এখানে এবং এখানে ) মাধ্যমে যা ব্যবহার করতে পারেন তা ব্যবহার করতে পারেন :

Gradle:

implementation 'androidx.appcompat:appcompat:1.0.0-beta01'

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val originalDrawable = ContextCompat.getDrawable(this, R.drawable.avatar_1)!!
        val bitmap = convertDrawableToBitmap(originalDrawable)
        val drawable = RoundedBitmapDrawableFactory.create(resources, bitmap)
        drawable.setAntiAlias(true)
        drawable.cornerRadius = Math.max(bitmap.width, bitmap.height) / 2.0f
        avatarImageView.setImageDrawable(drawable)
    }

    companion object {
        @JvmStatic
        fun convertDrawableToBitmap(drawable: Drawable): Bitmap {
            if (drawable is BitmapDrawable)
                return drawable.bitmap
            // We ask for the bounds if they have been set as they would be most
            // correct, then we check we are  > 0
            val bounds = drawable.bounds
            val width = if (!bounds.isEmpty) bounds.width() else drawable.intrinsicWidth
            val height = if (!bounds.isEmpty) bounds.height() else drawable.intrinsicHeight
            // Now we check we are > 0
            val bitmap = Bitmap.createBitmap(if (width <= 0) 1 else width, if (height <= 0) 1 else height,
                    Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            drawable.setBounds(0, 0, canvas.width, canvas.height)
            drawable.draw(canvas)
            return bitmap
        }
    }
}

মাঝামাঝি / লেআউট / activity_main.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context=".MainActivity">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/avatarImageView" android:layout_width="100dp" android:layout_height="100dp"
        android:layout_gravity="center"/>

</FrameLayout>

মাঝামাঝি / অঙ্কনযোগ্য / avatar_1.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="128dp" android:height="128dp"
        android:viewportHeight="128.0" android:viewportWidth="128.0">
    <path
        android:fillColor="#FF8A80" android:pathData="M0 0h128v128h-128z"/>
    <path
        android:fillColor="#FFE0B2"
        android:pathData="M36.3 94.8c6.4 7.3 16.2 12.1 27.3 12.4 10.7,-.3 20.3,-4.7 26.7,-11.6l.2.1c-17,-13.3,-12.9,-23.4,-8.5,-28.6 1.3,-1.2 2.8,-2.5 4.4,-3.9l13.1,-11c1.5,-1.2 2.6,-3 2.9,-5.1.6,-4.4,-2.5,-8.4,-6.9,-9.1,-1.5,-.2,-3 0,-4.3.6,-.3,-1.3,-.4,-2.7,-1.6,-3.5,-1.4,-.9,-2.8,-1.7,-4.2,-2.5,-7.1,-3.9,-14.9,-6.6,-23,-7.9,-5.4,-.9,-11,-1.2,-16.1.7,-3.3 1.2,-6.1 3.2,-8.7 5.6,-1.3 1.2,-2.5 2.4,-3.7 3.7l-1.8 1.9c-.3.3,-.5.6,-.8.8,-.1.1,-.2 0,-.4.2.1.2.1.5.1.6,-1,-.3,-2.1,-.4,-3.2,-.2,-4.4.6,-7.5 4.7,-6.9 9.1.3 2.1 1.3 3.8 2.8 5.1l11 9.3c1.8 1.5 3.3 3.8 4.6 5.7 1.5 2.3 2.8 4.9 3.5 7.6 1.7 6.8,-.8 13.4,-5.4 18.4,-.5.6,-1.1 1,-1.4 1.7,-.2.6,-.4 1.3,-.6 2,-.4 1.5,-.5 3.1,-.3 4.6.4 3.1 1.8 6.1 4.1 8.2 3.3 3 8 4 12.4 4.5 5.2.6 10.5.7 15.7.2 4.5,-.4 9.1,-1.2 13,-3.4 5.6,-3.1 9.6,-8.9 10.5,-15.2m-14.4,-49.8c.9 0 1.6.7 1.6 1.6 0 .9,-.7 1.6,-1.6 1.6,-.9 0,-1.6,-.7,-1.6,-1.6,-.1,-.9.7,-1.6 1.6,-1.6zm-25.7 0c.9 0 1.6.7 1.6 1.6 0 .9,-.7 1.6,-1.6 1.6,-.9 0,-1.6,-.7,-1.6,-1.6,-.1,-.9.7,-1.6 1.6,-1.6z"/>
    <path
        android:fillColor="#E0F7FA"
        android:pathData="M105.3 106.1c-.9,-1.3,-1.3,-1.9,-1.3,-1.9l-.2,-.3c-.6,-.9,-1.2,-1.7,-1.9,-2.4,-3.2,-3.5,-7.3,-5.4,-11.4,-5.7 0 0 .1 0 .1.1l-.2,-.1c-6.4 6.9,-16 11.3,-26.7 11.6,-11.2,-.3,-21.1,-5.1,-27.5,-12.6,-.1.2,-.2.4,-.2.5,-3.1.9,-6 2.7,-8.4 5.4l-.2.2s-.5.6,-1.5 1.7c-.9 1.1,-2.2 2.6,-3.7 4.5,-3.1 3.9,-7.2 9.5,-11.7 16.6,-.9 1.4,-1.7 2.8,-2.6 4.3h109.6c-3.4,-7.1,-6.5,-12.8,-8.9,-16.9,-1.5,-2.2,-2.6,-3.8,-3.3,-5z"/>
    <path
        android:fillColor="#444" android:pathData="M76.3,47.5 m-2.0, 0 a 2.0,2.0 0 1,1 4.0,0 a2.0,2.0 0 1,1 -4.0,0"/>
    <path
        android:fillColor="#444" android:pathData="M50.7,47.6 m-2.0, 0 a 2.0,2.0 0 1,1 4.0,0 a2.0,2.0 0 1,1 -4.0,0"/>
    <path
        android:fillColor="#444"
        android:pathData="M48.1 27.4c4.5 5.9 15.5 12.1 42.4 8.4,-2.2,-6.9,-6.8,-12.6,-12.6,-16.4 17.2 1.5 14.1,-9.4 14.1,-9.4,-1.4 5.5,-11.1 4.4,-11.1 4.4h-18.8c-1.7,-.1,-3.4 0,-5.2.3,-12.8 1.8,-22.6 11.1,-25.7 22.9 10.6,-1.9 15.3,-7.6 16.9,-10.2z"/>
</vector>

ফলাফল:

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

এবং, ধরুন আপনি এর উপরে একটি সীমানা যুক্ত করতে চান, উদাহরণস্বরূপ আপনি এটি ব্যবহার করতে পারেন:

stroke_drawable.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <stroke
        android:width="4dp" android:color="@android:color/black"/>
</shape>

এবং android:foreground="@drawable/stroke_drawable"এক্সএমএল লেআউটে লেআউটে চিত্রকল্পে যুক্ত করুন এবং আপনি এটি পান:

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

তবে কীভাবে ছায়া যুক্ত করবেন তা আমি নিশ্চিত নই (এটি পুরানো অ্যান্ড্রয়েড সংস্করণগুলিতে কাজ করবে) তবে। ব্যবহার FloatingActionButton (থেকে "com.google.android.material: উপাদান" নির্ভরতা ), আমি বিটম্যাপ ভরাট FAB নিজেই করতে ব্যর্থ হন। পরিবর্তে এটি ব্যবহার করা আরও কার্যকর হতে পারে যদি এটি কাজ করে।


সম্পাদনা: আপনি যদি উন্নয়নের ছায়া যুক্ত করতে চান (21 এপ্রিল থেকে উপলব্ধ), আপনি যা লিখেছিলেন তাতে আপনি কিছুটা পরিবর্তন করতে পারেন:

XML ফাইলের বিন্যাসের অভ্যন্তরে:

<androidx.appcompat.widget.AppCompatImageView android:padding="4dp"
    android:id="@+id/avatarImageView" android:layout_width="100dp" android:layout_height="100dp" android:elevation="8dp"
    android:layout_gravity="center" android:background="@drawable/stroke_drawable" tools:srcCompat="@drawable/avatar_1"/>

CircularShadowViewOutlineProvider.kt

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
class CircularShadowViewOutlineProvider : ViewOutlineProvider() {
    override fun getOutline(view: View, outline: Outline) {
        val size = Math.max(view.width, view.height)
        outline.setRoundRect(0, 0, size, size, size / 2f)
    }
}

কোডে:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        avatarImageView.outlineProvider = CircularShadowViewOutlineProvider()

ফলাফল:

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


0

আমার একটি সহজ সমাধান আছে। আপনার প্যাকেজের নামটি ডান ক্লিক করে এবং নতুন> চিত্র সম্পদ নির্বাচন করে একটি নতুন চিত্র সম্পদ তৈরি করুন। নাম (যে কোনও নাম) এবং পথ প্রবেশ করুন (আপনার সিস্টেমে চিত্রের অবস্থান)। তারপরে Next এবং সমাপ্তিতে ক্লিক করুন। আপনি যদি চিত্রটির নাম 'ইম্জি' হিসাবে প্রবেশ করেন, মিপম্যাপ ফোল্ডারে স্বয়ংক্রিয়ভাবে 'img_round' নামের একটি বৃত্তাকার চিত্র তৈরি করা হবে।

তারপরে, এটি করুন:

<ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/img_round"/>

আপনার পূর্বরূপটি এখনও একটি আয়তক্ষেত্রাকার চিত্র দেখাতে পারে। তবে আপনি যদি আপনার ডিভাইসে অ্যাপটি চালনা করেন তবে এটি গোলাকার হবে।


0

একটি কাস্টমআইজভিউ তৈরি করুন তারপরে কেবল তার onDraw()পদ্ধতিটি ওভাররাইড করে:

@Override
protected void onDraw(Canvas canvas) {

    float radius = this.getHeight()/2;
    Path path = new Path();
    RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
    path.addRoundRect(rect, radius, radius, Path.Direction.CW);
    canvas.clipPath(path);
    super.onDraw(canvas);

}

আপনি যদি কাস্টম উইজেটের কোডও চান তবে: -

CircularImageView.java

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

import androidx.annotation.Nullable;

public class CircularImageView extends ImageView {

    private Drawable image;

    public CircularImageView(Context context) {
        super(context);

        init(null, 0);
    }

    public CircularImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        init(attrs, 0);
    }

    public CircularImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        init(attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        float radius = this.getHeight()/2;
        Path path = new Path();
        RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
        path.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(path);
        super.onDraw(canvas);

    }

    private void init(AttributeSet attrs, int defStyle) {
        TypedArray a = Utils.CONTEXT.getTheme().obtainStyledAttributes(attrs, R.styleable.CircularImageView, 0, 0);
        try {
            image = a.getDrawable(R.styleable.CircularImageView_src);
        } finally {
            a.recycle();
        }

        this.setImageDrawable(image);
    }
}

এছাড়াও, প্রয়োজনীয় বৈশিষ্ট্য তৈরি করতে আপনার রেজ / অ্যাটার্স.এক্সএমএলগুলিতে নিম্নলিখিত কোডটি যুক্ত করুন : -

<declare-styleable name="CircularImageView">
        <attr name="src" format="reference" />
</declare-styleable>

চিত্রের ভিউ ব্যাকগ্রাউন্ড না থাকলে এটি কাজ করবে। তাহলে কি করব?
সুপ্রদীপ.এম

0
if you want to set edit icon on to circle imageview than put this below code.

 <FrameLayout
                android:layout_width="@dimen/_100sdp"
                android:layout_height="@dimen/_100sdp"
                android:layout_gravity="center"
                android:layout_marginTop="10dp">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/profilePic"
                    android:layout_width="@dimen/_100sdp"
                    android:layout_height="@dimen/_100sdp"
                    android:layout_gravity="bottom|center_horizontal"
                    android:src="@drawable/ic_upload" />

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/iv_camera"
                    android:layout_width="@dimen/_30sdp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_gravity="top|right"
                    android:src="@drawable/edit"/>
            </FrameLayout>

0

যদি আপনি বরং চিত্রটি বৃত্তাকারে প্রদর্শন করতে চান তবে এখানে যান

public static Bitmap getCircularBitmap(Bitmap bitmap) {
        Bitmap output;

        if (bitmap.getWidth() > bitmap.getHeight()) {
            output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        } else {
            output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

        float r = 0;

        if (bitmap.getWidth() > bitmap.getHeight()) {
            r = bitmap.getHeight() / 2;
        } else {
            r = bitmap.getWidth() / 2;
        }

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawCircle(r, r, r, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;
    }

-1

কেবল এই সাধারণ কোডটি ব্যবহার করুন: প্রথমে নির্ভরতা যুক্ত করুন:

implementation 'de.hdodenhof:circleimageview:2.2.0'

তারপরে নীচের কোডটি xML বিন্যাসে যুক্ত করুন: -

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
                                        android:id="@+id/Imgshaligram"
                                        android:layout_width="96dp"
                                        android:layout_height="96dp"
                                        android:src="@drawable/shaligram"
                                        app:civ_border_color="#d1b1b1"

                                        android:foregroundGravity="center"/>

-1

এছাড়াও, এই দুটি গ্রন্থাগার আপনাকে সহায়তা করতে পারে।

https://github.com/vinc3m1/RoundedImageView

কোড নীচে বাস্তবায়ন:

implementation 'com.makeramen:roundedimageview:2.3.0'

সাধারণ ব্যবহার:

<com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/imageView1"
        android:src="@drawable/photo1"
        android:scaleType="fitCenter"
        app:riv_corner_radius="30dip"
        app:riv_border_width="2dip"
        app:riv_border_color="#333333"
        app:riv_mutate_background="true"
        app:riv_tile_mode="repeat"
        app:riv_oval="true" />

https://github.com/chirag-kachhadiya/RoundedImageView

সাধারণ ব্যবহার:

কোড নীচে বাস্তবায়ন:

implementation 'com.github.chirag-kachhadiya:RoundedImageView:1.0'



 <com.infinityandroid.roundedimageview.RoundedImageView
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:adjustViewBounds="true"
                android:src="@drawable/the_hundred"
                app:corner_radius="10" />

-1

যেমন ওড়হান ওবুতের উত্তরে বর্ণিত হয়েছিল তবে পরিবর্তনের সাথে:

<ImageView
    android:layout_width="0dp"  //or use your own value
    android:layout_height="match_parent"
    android:src="@drawable/img"
    android:layout_weight="75" />// in case of use of weight

চিত্রের প্রসার এড়াতে। এবং img.xML:

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/profile" />
<item android:drawable="@drawable/circle" /></layer-list>

(পরিবর্তন ছাড়াই), এবং চেনাশোনা। xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="2"
android:shape="ring"
android:thickness="300dp"
android:useLevel="false">
<solid android:color="@android:color/white"/>
<stroke
    android:width="2dp"
    android:color="@android:color/black"/>
</shape>
 

এখানে রিংয়ের বেধ সর্বাধিক - 1000 ডিপি
এবং ব্যাসার্ধের অনুপাতটি ইমেজ প্রস্থের অর্ধেক (সর্বোচ্চ রিং প্রস্থ, হ্যাঁ?) - 2
প্রয়োজন এবং প্রয়োজনে স্ট্রোকটি প্রয়োজনীয় সীমান্তের জন্য।
আমি স্কয়ার পিএনজি ইমেজ (প্রোফাইল.png), বিটিডব্লিউ ব্যবহার করেছি। একই প্রস্থ এবং উচ্চতা সহ। ইচ্ছামত ইমেজভিউ মাত্রার জন্য এটি সঠিক। এখানে চিত্র বর্ণনা লিখুন

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