বৃত্তাকার কোণার সাথে কীভাবে একটি চিত্রভিউ তৈরি করবেন?


573

অ্যান্ড্রয়েডে, একটি চিত্রভিউ ডিফল্টরূপে একটি আয়তক্ষেত্র হয়। আমি কীভাবে এটিকে বৃত্তাকার আয়তক্ষেত্রটি করতে পারি (আমার বিটম্যাপের 4 টি কোণে গোলাকৃত আয়তক্ষেত্রগুলি ক্লিপ করে) ছবিভিউতে রাখতে পারি?


এটি সহায়ক হতে পারে স্ট্যাকওভারফ্লো.com
মঙ্গেশ

পুরানো নীচে লুকানো, আরও জটিল উত্তর হ'ল আমার মনে হয় এখনই গ্রহণযোগ্য উত্তর হওয়া উচিত: রাউন্ডডবিটম্যাপড্রেবল , ভি 4 সাপোর্ট লাইব্রেরি রিভিশন 21-এ যোগ হয়েছে
জোনিক

আপনি এটা সবচেয়ে সহজ উপায় শুধু একটি ImageView ভিতরে CardView ব্যবহার করে তা করতে পারে - এখানে উদাহরণস্বরূপ দেখুন stackoverflow.com/a/41479670/4516797
Taras Vovkovych

এই গ্রন্থাগারটি খুব দরকারী।
গ্রিগোর

এখন এই পরীক্ষা করে দেখুন আমরা আছে ShapeableImageViewবৃত্তাকার বা বৃত্তাকার imageView করতে stackoverflow.com/a/61086632/7666442
নিলেশ রাঠোর

উত্তর:


544

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

http://www.ruibm.com/?p=184

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

চূড়ান্ত কোডটি এর মতো দেখাচ্ছে:

package com.company.app.utils;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;

public class ImageHelper {
    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                .getHeight(), 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());
        final RectF rectF = new RectF(rect);
        final float roundPx = pixels;

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        return output;
    }
}

আশা করি এটি কাউকে সাহায্য করবে!


4
এটি সমস্ত ডিভাইসের জন্য কাজ করে না I আমার কোথাও পরিবর্তন দরকার?
স্প্রিং ব্রেকার

7
এটি 200 * 200 ছবির জন্য এটি করতে প্রায় 0.03 সেকেন্ড সময় লাগে, সুতরাং আমি মনে করি এটি সেরা সমাধান নয়।
জ্যাকি

2
এটি কেবল উপরের বাম এবং উপরের ডান কোণে গোল করে। কেন?
পূর্বক

1
@ vinc3m1 সমাধান এখানে github.com/makeramen/ রাউন্ডডআইমেজভিউ সত্যিই ভাল কাজ করে! তার উত্তর (দেখুন stackoverflow.com/a/15032283/2048266 )
nommer

16
চিত্র দর্শনের স্কেলটাইপ সেট করার চেষ্টা করার সময় ভাল কাজ করছেন না, কেবল ফিটএক্সওয়াই কাজ করছে, সেন্টারক্রপ এবং অন্যান্য অপ্রত্যাশিত ফলাফল দেখাচ্ছে, এখানে যে কেউ একই সমস্যা পেয়েছে?
শিবংশ

211

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

BitmapShader shader;
shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(shader);

RectF rect = new RectF(0.0f, 0.0f, width, height);

// rect contains the bounds of the shape
// radius is the radius in pixels of the rounded corners
// paint contains the shader that will texture the shape
canvas.drawRoundRect(rect, radius, radius, paint);

অন্যান্য পদ্ধতির তুলনায় এর সুবিধাগুলি হ'ল:

  • বিটম্যাপের একটি পৃথক অনুলিপি তৈরি করে না, যা বড় চিত্রগুলির সাথে প্রচুর মেমরি ব্যবহার করে [অন্যান্য উত্তরগুলির তুলনায় এখানে]
  • antialisasing [বনাম ক্লিপপথ পদ্ধতি] সমর্থন করে
  • আলফা সমর্থন করে [বনাম xfermode + পোর্টারডুফ পদ্ধতি]
  • হার্ডওয়্যার ত্বরণ [বনাম ক্লিপপথ পদ্ধতি] সমর্থন করে
  • শুধুমাত্র ক্যানভাসে একবার আঁকুন [বনাম এক্সফারমোড এবং ক্লিপপথ পদ্ধতি]

আমি এই কোডটিকে ভিত্তি করে একটি গোলটেড আইজামভিউ তৈরি করেছি যা এই যুক্তিকে একটি চিত্রভিউতে আবৃত করে এবং যথাযথ ScaleTypeসমর্থন এবং optionচ্ছিক বৃত্তাকার সীমানা যুক্ত করে।


আপনার / example / res / layout / rounded_item.xml সমস্ত উত্স হার্ডকোড করা অবস্থায় আপনি কেন একটি চিত্র এসসিআর নির্দিষ্ট করবেন? সুন্দর ডেমো, ঠিক ওভারকিল।
কোথাও কোথাও

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

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

1
আপনি যদি স্ক্রিনশট বা ডিভাইসগুলি সরবরাহ করতে পারেন যেখানে এটি কাজ করে না, বা এমনকি একটি স্থির এবং টানুন অনুরোধের অফার হিসাবে যেতে পারে, তবে এটি সবচেয়ে কার্যকর হবে। আমি আমার ডিভাইসে একাধিকবার ঘোরানোর পরীক্ষা করেছি এবং মেমরি একই থাকে।
vinc3m1

11
মনে রাখবেন যে চিত্রটির আকার 2048 পিক্সেলের উপরে থাকলে এটি কাজ করবে না। শেডার কোনও টেক্সচারকে এর চেয়ে বড় হতে সমর্থন করে না।
গ্যাবার

209

আর একটি সহজ উপায় হল কোণার ব্যাসার্ধের সাথে কার্ডভিউ এবং অভ্যন্তরে একটি চিত্র ভিউ ব্যবহার করা:

  <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:cardCornerRadius="8dp"
            android:layout_margin="5dp"
            android:elevation="10dp">

            <ImageView
                android:id="@+id/roundedImageView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:src="@drawable/image"
                android:background="@color/white"
                android:scaleType="centerCrop"
                />
        </android.support.v7.widget.CardView>

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


5
ভাল কাজের মত মনে হচ্ছে। তবে এটি প্রাক-ললিপপগুলিতে চিত্রগুলি ক্লিপ করে না।
নিকোলাই

1
তবে, আমরা কেবল উপরের বাম এবং শীর্ষে ডান কোণে ব্যাসার্ধ চাই এবং সমস্ত কোণে নয়?
প্রতীক সিংহল

3
যে কোনও দৃষ্টিতে কার্ভ বর্ডার প্রয়োগ করার খুব সহজ এবং স্মার্ট উপায়।
AMI CHARADAVA

1
ভাল সমাধান তবে উচ্চতা কেবলমাত্র এপিআই স্তর 21 এবং তারপরে সমর্থিত
সাদ বিলাল

1
কার্ডের উন্নতি অ্যাপ্লিকেশনটি অক্ষম করতে: কার্ডএলভিশন = "0 ডিপি" (অ্যান্ড্রয়েড নয়: উচ্চতা নয়)
জনি পাঁচ

148

বৃত্তাকার আকারগুলিতে ক্লিপিং Viewএপিআই 21- এ ক্লাসে যুক্ত করা হয়েছিল ।

শুধু এটি করুন:

  • একটি গোলাকার আকৃতি আঁকতে সক্ষম তৈরি করুন, এরকম কিছু:

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

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="10dp" />
    ...
</shape>
  • আপনার চিত্রকল্পের পটভূমি হিসাবে অঙ্কনযোগ্যকে সেট করুন: android:background="@drawable/round_outline"
  • এই ডকুমেন্টেশন অনুসারে , তারপরে আপনাকে যা করতে হবে তা হ'ল অ্যাডandroid:clipToOutline="true"

দুর্ভাগ্যক্রমে, একটি ত্রুটি আছে এবং এটি XML বৈশিষ্ট্যটি স্বীকৃত নয়। ভাগ্যক্রমে, আমরা এখনও জাভাতে ক্লিপিং সেটআপ করতে পারি:

  • আপনার ক্রিয়াকলাপ বা খণ্ডে: ImageView.setClipToOutline(true)

এটি দেখতে কেমন হবে তা এখানে:

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

বিঃদ্রঃ:

এই পদ্ধতিটি কোনও অঙ্কনযোগ্য আকারের জন্য কাজ করে (কেবল গোলাকার নয়)। এটি আপনার অঙ্কনযোগ্য এক্সএমএলতে আপনি যে আকারের রূপরেখাটি সংজ্ঞায়িত করেছেন তাতে চিত্রটি ভিউ ক্লিপ করবে।

ইমেজভিউ সম্পর্কে বিশেষ দ্রষ্টব্য

setClipToOutline()শুধুমাত্র তখনই কাজ করা হয় যখন ভিউ এর পটভূমি একটি আকার আঁকতে সেট করা হয়। যদি এই ব্যাকগ্রাউন্ড শেপটি বিদ্যমান থাকে তবে ক্লিপিং এবং শেডিংয়ের উদ্দেশ্যে সীমানা হিসাবে আকৃতির বাহ্যরেখাটি দেখুন।

এর অর্থ, আপনি যদি setClipToOutline()কোনও চিত্র ভিউতে কোণাগুলি গোল করতে ব্যবহার করতে চান তবে আপনার চিত্রটি অবশ্যই এর android:srcপরিবর্তে সেট করা android:backgroundউচিত (যেহেতু ব্যাকগ্রাউন্ডটি অবশ্যই আপনার বৃত্তাকার আকারে সেট করা যেতে পারে)। আপনি যদি src এর পরিবর্তে আপনার চিত্র সেট করতে পটভূমি ব্যবহার করেন তবে আপনি এই কর্মটি ব্যবহার করতে পারেন:

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

10
ত্রুটি: (x) প্যাকেজ 'অ্যান্ড্রয়েড' এ 'ক্লিপটো আউটলাইন' বৈশিষ্ট্যের জন্য কোনও সংস্থান সনাক্তকারী পাওয়া যায় নি
আনু মার্টিন

7
পরিবর্তে android:clipToOutline, একটি ব্যবহার করা আবশ্যক android:outlineProvider="background"
উইন্ডারাইডার

2
গুগলকে আমি "ভালবাসি" এর আর একটি কারণ হ'ল এই বাগটি আমার বয়স প্রায় এবং এখনও এর ছোট্ট পৃথিবীতে বাস করে। গুগল মনে হচ্ছে এটি সম্পর্কে কোনও ক্র * দিচ্ছে না))
ফরিদ

1
আমি কেবল এই পর্বে ব্যাকগ্রাউন্ড শেপের শীর্ষ বাম এবং টপরাইট কোণার সেট করে দিলে এই পদ্ধতির সাথে আমার কোনও সাফল্য নেই বলে মনে হচ্ছে।
পিটারডকে

- @AnuMartin এই জানা ব্যাপার issuetracker.google.com/issues/37036728
ভাদিম Kotov

132

সাপোর্ট লাইব্রেরির v21 এ এখন এর সমাধান রয়েছে: এটিকে রাউন্ডডবিটম্যাপড্র্যাবল বলা যায়

এটি মূলত একটি সাধারণ অঙ্কনযোগ্যের মতো তবে আপনি এটি দিয়ে ক্লিপিংয়ের জন্য কোণার ব্যাসার্ধ ব্যতীত:

setCornerRadius(float cornerRadius)

সুতরাং, Bitmap srcএকটি লক্ষ্য দিয়ে শুরু করে ImageView, এটি দেখতে এরকম কিছু দেখাচ্ছে:

RoundedBitmapDrawable dr = RoundedBitmapDrawableFactory.create(res, src);
dr.setCornerRadius(cornerRadius);
imageView.setImageDrawable(dr);

3
দুর্দান্ত ধন্যবাদ, পরবর্তী পদক্ষেপটি এখানে: স্ট্যাকওভারফ্লো.com
ডেভিড ডি সি ই

আসলে আছে android.support.v4.graphics.drawable.RoundedBitmapDrawableFactoryতাই v4এটি সমর্থন করে।
ডেডফিশ

2
@deadfish হ্যাঁ তার মধ্যে v4সমর্থন গ্রন্থাগার কিন্তু যতক্ষণ না REVISION 21সমর্থন লাইব্রেরির
tyczj

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

2
দুর্ভাগ্যক্রমে কাজ করে না scaleType centerCrop(লাইব্রেরি v25.3.1 সমর্থন করুন)
রকনো

67

আমি কাস্টম ইমেজভিউ করেছেন:

public class RoundRectCornerImageView extends ImageView {

    private float radius = 18.0f;
    private Path path;
    private RectF rect;

    public RoundRectCornerImageView(Context context) {
        super(context);
        init();
    }

    public RoundRectCornerImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public RoundRectCornerImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        path = new Path();

    }

    @Override
    protected void onDraw(Canvas canvas) {
        rect = new RectF(0, 0, this.getWidth(), this.getHeight());
        path.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(path);
        super.onDraw(canvas);
    }
}

ব্যবহারবিধি:

<com.mypackage.RoundRectCornerImageView
     android:id="@+id/imageView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/image"
     android:scaleType="fitXY" />

আউটপুট:

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

আশা করি এটি আপনাকে সহায়তা করবে।


এটি চিত্রকে অস্পষ্ট করে তোলে
অমিত হুদা

2
এমনকি অ্যান্ড্রয়েডের সাথেও কাজ করে: স্কেলটাইপ = "সেন্টারক্রপ", সহজ, নতুন বিটম্যাপ তৈরি করে না। ধন্যবাদ!
এর্নাজম

1
@ হিরেন এই দ্রষ্টব্যটি ব্যাকগ্রাউন্ড চিত্র সহ ইমেজভিউয়ের জন্য দুর্দান্ত কাজ করে। তবে এটি চিত্রগ্রাহকদের জন্য কাজ করে না, যার পটভূমির রঙ রয়েছে এবং কোনও চিত্র নেই। আপনি আমাকে বলতে পারেন কেন এমন হচ্ছে?
ব্যবহারকারী 2991413

Canvas.clipPath()java.lang.UnsupportedOperationExceptionকিছু ক্ষেত্রে হতে পারে । দেখুন stackoverflow.com/questions/13248904/...
Artyom

1
এই সমাধানটি কেবলমাত্র চিত্রের সাথে সেট করার জন্যই কাজ করে android:backgroundতবে তা নয় android:src
শীতলমাইন্ড

63

একটি দ্রুত এক্সএমএল সমাধান -

<android.support.v7.widget.CardView
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:cardElevation="0dp"
            app:cardCornerRadius="4dp">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rounded_user_image"
        android:scaleType="fitXY"/>

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

আপনি কার্ডভিউতে ইমেজভিউতে আপনার পছন্দসই প্রস্থ, উচ্চতা এবং ব্যাসার্ধ সেট করতে পারেন।

AndroidX এর সাথে, ব্যবহার করুন <androidx.cardview.widget.CardView>


4
এই পদ্ধতিরটি androidx.cardview.widget.CardView
ইভান

7
নিশ্চিত না কেন এটিতে আরও বেশি অগ্রগতি নেই? আমার মতে লাইব্রেরি এবং প্রচুর পরিমাণে শিট কোড ছাড়াই সেরা সমাধান (যদিও আমি আমার ক্ষেত্রে সেন্টার ক্রপ স্কেলিং ব্যবহার করেছি)।
থেমবোনস

1
এখনও অনেকগুলি আপভোট হয়নি, কারণ এটি একটি নতুন উত্তর। তবে আমি শীঘ্রই এটি সরিয়ে নিতে আমার +1 রেখেছি! ধন্যবাদ!
মাইক্রো

তবে এটি কাজ করে তবে এখানে চিত্রটি প্রসারিত হবে কারণ এটি scaleType="fitXY"যথাযথ @ থেমবোনগুলি দেখে না
উইজার্ড

@ উইজার্ড এ কারণেই আমি উল্লেখ করেছি যে আপনি নিজের পছন্দসই স্কেল টাইপটি ইমেজভিউতে সেট করতে পারেন
চিরাগ মিত্তাল

57

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

public static Bitmap getRoundedCornerBitmap(Context context, Bitmap input, int pixels , int w , int h , boolean squareTL, boolean squareTR, boolean squareBL, boolean squareBR  ) {

    Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    final float densityMultiplier = context.getResources().getDisplayMetrics().density;

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, w, h);
    final RectF rectF = new RectF(rect);

    //make sure that our rounded corner is scaled appropriately
    final float roundPx = pixels*densityMultiplier;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);


    //draw rectangles over the corners we want to be square
    if (squareTL ){
        canvas.drawRect(0, h/2, w/2, h, paint);
    }
    if (squareTR ){
        canvas.drawRect(w/2, h/2, w, h, paint);
    }
    if (squareBL ){
        canvas.drawRect(0, 0, w/2, h/2, paint);
    }
    if (squareBR ){
        canvas.drawRect(w/2, 0, w, h/2, paint);
    }


    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(input, 0,0, paint);

    return output;
}

এছাড়াও, আমি এটি যুক্ত করতে ইমেজভিউকে ওভাররড করেছি যাতে আমি এটি এক্সএমএলে সংজ্ঞায়িত করতে পারি। সুপার কলটি এখানে কিছু যুক্তি যুক্ত করতে পারে, তবে এটি আমার ক্ষেত্রে সহায়ক না হওয়ায় আমি এটি মন্তব্য করেছি।

    @Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas);
        Drawable drawable = getDrawable();

        Bitmap b =  ((BitmapDrawable)drawable).getBitmap() ;
        Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);

        int w = getWidth(), h = getHeight();


        Bitmap roundBitmap =  CropImageView.getRoundedCornerBitmap( getContext(), bitmap,10 , w, h , true, false,true, false);
        canvas.drawBitmap(roundBitmap, 0,0 , null);
}

আশাকরি এটা সাহায্য করবে!


4
বেশ দুর্দান্ত, বিশেষত ইমেজভিউটি প্রসারিত করা
কেউ 26

2
ইমেজভিউ # অনড্রু () এর লজিক রাখার একটি সহজ উপায় হ'ল বৃত্তাকার কোণার বিটম্যাপটি ইমেজভিউয়ের অঙ্কনযোগ্যকে সেট করা, এবং বিটম্যাপটি আঁকতে সুপার.অনড্র্যাব () ছেড়ে যাওয়া। আমি একটি ক্লাস রাউন্ডেডকর্ণার আইমেজভিউ তৈরি করেছি এবং এর ব্যবহারের উদাহরণটি এখানে । দয়া করে লক্ষ্য করুন যে আমি যে getRoundedCornerBitmap () ব্যবহার করেছি তা পিক্সেল স্বতন্ত্র নয়।
umbalaconmeogia

রাউন্ডডকর্নারআইমেজভিউয়ের জন্য ধন্যবাদ। আমি এটি ব্যবহার করেছি তবে এটি পিক্সেল-ঘনত্ব স্বাধীন হতে সংশোধন করেছি।
প্যাসিফিকস্কি

উম্বার গোলকৃত কর্নার আইমেজভিউতে উত্স কোডটি এখানে: কোড. google.com/p/android-batsg/source/browse/trunk/…
কোথাও কোথাও

@ ক্যাস্পার হারমার ঠিক ১ টি সম্পাদনা করছে ... এখানে চারটি শর্ত রয়েছে ... এগুলি পরিবর্তন করুন যেন আমি সত্য, সত্য, মিথ্যা, মিথ্যা সেট করে থাকি তবে এটি শীর্ষ কোণার পরিবর্তে নীচের কোণায় সেট করবে ... অন্যদিকে কোড সূক্ষ্মভাবে কাজ করছে। সুতরাং স্কয়ারটিএল এবং স্কোয়ারটিআর হ'ল যথাক্রমে স্কোয়ারবিএল এবং স্কোয়ারবিআরের জন্য কনডেশন .. এবং ভিসা-বিপরীতে।
TheFlash

48

বৃত্তাকার চিত্র ব্যবহার ImageLoader এখানে

তৈরি করুন DisplayImageOptions:

DisplayImageOptions options = new DisplayImageOptions.Builder()
    // this will make circle, pass the width of image 
    .displayer(new RoundedBitmapDisplayer(getResources().getDimensionPixelSize(R.dimen.image_dimen_menu))) 
    .cacheOnDisc(true)
    .build();

imageLoader.displayImage(url_for_image,ImageView,options);

অথবা আপনি Picassoস্কোয়ার থেকে লাইব্রেরি ব্যবহার করতে পারেন ।

Picasso.with(mContext)
    .load(com.app.utility.Constants.BASE_URL+b.image)
    .placeholder(R.drawable.profile)
    .error(R.drawable.profile)
    .transform(new RoundedTransformation(50, 4))
    .resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size)
    .centerCrop()
    .into(v.im_user);

আপনি RoundedTransformation ফাইল এখানে ডাউনলোড করতে পারেন এখানে


1
চিত্র প্রদর্শন করা হচ্ছে না
অমিত থাপার

3
পিকাসো লাইব্রেরিটি একটি ভাল, এবং প্রয়োগ করা খুব সহজ, অনেক অনেক ধন্যবাদ +1
हितেশ

3
পিকাসোর লাইব্রেরিটি যদিও "স্থানধারক" এবং "ত্রুটি" চিত্রটি রূপান্তরিত করে না বলে মনে হয়, সুতরাং আপনার চিত্রটি যদি লোড করতে ব্যর্থ হয় (ত্রুটি) বা প্রাথমিকভাবে লোড করতে কিছু সময় নেয় (প্লেসোল্ডার) এটি চিত্রটিকে বৃত্তাকার চিত্র হিসাবে প্রদর্শন করবে না। github.com/square/picasso/issues/337
পেলপোট্রনিক

অন্যান্য দরকারী পিকাসো রূপান্তরগুলি এই লাইব্রেরির দ্বারা সরবরাহ করা হয়েছে, এতে একটি গোলাকার কর্নারস
Massimo

ইউনিভে চিত্র কাটা নিয়ে কাজ করে না। চিত্র লোডার।
ইয়ার

26

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

এই জাতীয় স্বচ্ছ সামগ্রী সহ সীমানাযুক্ত আকার তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners 
        android:radius="30dp" />
    <stroke 
        android:color="#ffffffff"
        android:width="10dp" />
</shape> 

তারপরে কোনও রিলেটিভলয়েট এ আপনি প্রথমে আপনার চিত্রটি এবং তারপরে একই চিত্রে অন্য ইমেজভিউয়ের সাহায্যে স্থাপন করতে পারেন। সীমানা প্রস্থের পরিমাণের সাথে কভার-আকারটি আকারে আরও বড় হওয়া উচিত। বাইরের ব্যাসার্ধকে সংজ্ঞায়িত করা হলেও একটি বৃহত কোণার ব্যাসার্ধ নিতে সাবধান হন তবে অভ্যন্তরীণ ব্যাসার্ধটি যা আপনার চিত্রকে .েকে দেয়।

আশা করি এটিও কাউকে সাহায্য করবে।

সিকিউএম অনুসারে সম্পাদনা করুন আপেক্ষিক বিন্যাসের উদাহরণটি:

<?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" >

    <ImageView
        android:id="@+id/imageToShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imgCorners"
        android:layout_alignLeft="@+id/imgCorners"
        android:layout_alignRight="@+id/imgCorners"
        android:layout_alignTop="@+id/imgCorners"
        android:background="#ffffff"
        android:contentDescription="@string/desc"
        android:padding="5dp"
        android:scaleType="centerCrop" />

    <ImageView
        android:id="@+id/imgCorners"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:src="@drawable/corners_white" />

</RelativeLayout>

আপনি কি আরও কোড সহ এ সম্পর্কে আরও বিস্তারিত বলতে পারেন, বিশেষত দ্বিতীয় চিত্রের ভিউ দিয়ে কী করা হচ্ছে এবং যেখানে "বর্ডার শেপ" এক্সএমএল প্রয়োগ করা হচ্ছে (এসসিআর বা ব্যাকগ্রাউন্ড হিসাবে?) এখানে বেশ কয়েকটি প্রশ্ন রয়েছে। আমি এই সমাধানটি পছন্দ করতে চাই কারণ এটি আমাকে চারটি কোণে স্বাধীনভাবে নিয়ন্ত্রণ করতে দেয়
CQM

1
যদিও এটি একটি সহজ উত্তর বলে মনে হচ্ছে, দুর্ভাগ্যক্রমে এটি "মুখোশযুক্ত" চিত্রের চারপাশে মার্জিন যুক্ত করে যা অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া।
আবদালারহমান শতো

হ্যাঁ, তবে বৃত্তাকার কোণ এবং স্বচ্ছ পটভূমি সহ একটি পিএনজি-ড্রয়যোগ্য বা 9-প্যাচ-ড্রয়যোগ্য ভিত্তিতে ইমেজভিউয়ের সাথে একই কাজ করে যদি আপনার কোনও পূর্বনির্ধারিত দিক থাকে।
খ্রিস্টান

আমি একইভাবে করছি, এবং এর কাজ; এটি ওরিয়েন্টেশন এবং বিভিন্ন ফোনের আকার নিয়ে কোনও সমস্যা তৈরি করবে না তা জানতে আগ্রহী?
মুক্ত এবং বিনামূল্যে

আপনি যদি প্রত্যেকের সাথে সম্পর্কযুক্ত মাত্রাগুলি রাখেন তবে এটি কোনও সমস্যা তৈরি করে না।
খ্রিস্টান

21

সংস্করণ থেকে শুরু করে 1.2.0-alpha03এর উপাদান উপাদান লাইব্রেরী সেখানে নতুন ShapeableImageView

আপনি এর মতো কিছু ব্যবহার করতে পারেন:

  <com.google.android.material.imageview.ShapeableImageView
      ...
      app:shapeAppearanceOverlay="@style/roundedImageView"
      app:srcCompat="@drawable/ic_image" />

সঙ্গে:

  <style name="roundedImageView" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">8dp</item>
  </style>

বা প্রোগ্রামগতভাবে:

float radius = getResources().getDimension(R.dimen.default_corner_radius);
imageView.setShapeAppearanceModel(imageView.getShapeAppearanceModel()
    .toBuilder()
    .setAllCorners(CornerFamily.ROUNDED,radius)
    .build());

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


যদি চিত্রটির পটভূমির রঙ থাকে তবে এটি বর্তমানে বৃত্তাকার কোণগুলির নীচে পপ করতে পটভূমির রঙ উত্পাদন করে। এটি চিত্রের স্কেলটাইপ সম্পত্তিটিকেও উপেক্ষা করে।
inokey

14

আমার বৃত্তাকার কোণার উইজেটের সাথে ইমেজভিউ বাস্তবায়ন, যা (নিচে || উপরে) চিত্রকে প্রয়োজনীয় মাত্রায় মাপ দেয়। এটি কোড ফর্ম ক্যাসপএনজেড ব্যবহার করে।

public class ImageViewRounded extends ImageView {

    public ImageViewRounded(Context context) {
        super(context);
    }

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

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

    @Override
    protected void onDraw(Canvas canvas) {
        BitmapDrawable drawable = (BitmapDrawable) getDrawable();

        if (drawable == null) {
            return;
        }

        if (getWidth() == 0 || getHeight() == 0) {
            return; 
        }

        Bitmap fullSizeBitmap = drawable.getBitmap();

        int scaledWidth = getMeasuredWidth();
        int scaledHeight = getMeasuredHeight();

        Bitmap mScaledBitmap;
        if (scaledWidth == fullSizeBitmap.getWidth() && scaledHeight == fullSizeBitmap.getHeight()) {
            mScaledBitmap = fullSizeBitmap;
        } else {
            mScaledBitmap = Bitmap.createScaledBitmap(fullSizeBitmap, scaledWidth, scaledHeight, true /* filter */);
        }

        Bitmap roundBitmap = ImageUtilities.getRoundedCornerBitmap(getContext(), mScaledBitmap, 5, scaledWidth, scaledHeight,
                false, false, false, false);
        canvas.drawBitmap(roundBitmap, 0, 0, null);

    }

}

12
ইমেজ ইউটিলিটিগুলি কোথা থেকে আসে?
জেসনওয়াইট

1
@JasonWyatt sorrodos নিচে পোস্ট দেখতে
Damjan

12

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

প্রথমত, গ্লাইড সংস্করণ 4+ সেটআপ করুন :

implementation 'com.github.bumptech.glide:glide:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'

তারপরে টীকাগুলি প্রসেসিং ট্রিগার করতে গ্লিডের অ্যাপ মডিউল ক্লাস তৈরি করুন:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

তারপরে গ্লাইড এক্সটেনশন তৈরি করুন যা আসলে কাজ করে। আপনি যা চান তা করতে এটি কাস্টমাইজ করতে পারেন:

@GlideExtension
public class MyGlideExtension {

    private MyGlideExtension() {}

    @NonNull
    @GlideOption
    public static RequestOptions roundedCorners(RequestOptions options, @NonNull Context context, int cornerRadius) {
        int px = Math.round(cornerRadius * (context.getResources().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
        return options.transforms(new RoundedCorners(px));
    }
}

এই ফাইলগুলি যুক্ত করার পরে, আপনার প্রকল্পটি তৈরি করুন।

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

GlideApp.with(this)
        .load(imageUrl)
        .roundedCorners(getApplicationContext(), 5)
        .into(imageView);

RequestOptionsoptions
প্যারামগুলির

সম্পন্ন. ইনপুট জন্য ধন্যবাদ।
স্যার কোডসালোট

.গ্রাউন্ডকর্নার্স আসছে না আমাদের কি আর কিছু সেটআপ করার দরকার আছে? প্রকল্পটি পুনর্নির্মাণের পরেও
ড। এএনড্রো

এটি আমার জন্য কাজ করেছে, আপনাকে ধন্যবাদ। আমি @GlideExtensionএন্ডোটেড ক্লাসটি ব্যবহার করা এড়াতে আরও সহজ বলে মনে করেছি এবং .transform(new RoundedCorners(px))যেখানে pxএকই ( int px = Math.round(cornerRadius * (context.getResources().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));) রয়েছে ঠিক সেখানে গিয়েছিলাম ।
মাইকেল ওসোফস্কি

10

একটি দুর্দান্ত লাইব্রেরি আছে যা আপনাকে চিত্রদর্শনগুলি আকার দিতে দেয়।

এখানে একটি উদাহরণ:

<com.github.siyamed.shapeimageview.mask.PorterShapeImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:siShape="@drawable/shape_rounded_rectangle"
    android:src="@drawable/neo"
    app:siSquare="true"/>

আকৃতির সংজ্ঞা:

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

ফলাফল:

ফলাফল


1
এটি দুর্দান্ত এবং আরও অনেক কিছু করে আপনি যেমন একটি সীমানা যুক্ত করতে পারেন এবং কোনও আকার ব্যবহার করতে পারেন
আদম কিস

8

এখানে চিত্রের ভিউকে ওভাররাইড করার একটি সাধারণ উদাহরণ রয়েছে, এরপরে আপনি পূর্বরূপ দেখতে লেআউট ডিজাইনারেও এটি ব্যবহার করতে পারেন।

public class RoundedImageView extends ImageView {

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

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

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

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public RoundedImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void setImageDrawable(Drawable drawable) {
        float radius = 0.1f;
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        RoundedBitmapDrawable rid = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
        rid.setCornerRadius(bitmap.getWidth() * radius);
        super.setImageDrawable(rid);
    }
}

এটি দ্রুত সমাধানের জন্য। ব্যাসার্ধটি সমস্ত কোণে ব্যবহৃত হয় এবং বিটম্যাপ প্রস্থের শতাংশের ভিত্তিতে।

আমি কেবল setImageDrawableবৃত্তাকার বিটম্যাপ অঙ্কনযোগ্য এর জন্য ওভাররাইড এবং সমর্থন v4 পদ্ধতি ব্যবহার করেছি।

ব্যবহার:

<com.example.widgets.RoundedImageView
        android:layout_width="39dp"
        android:layout_height="39dp"
        android:src="@drawable/your_drawable" />

ইমেজভিউ এবং কাস্টম চিত্রের সাথে পূর্বরূপ:

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


এটি সব পরিস্থিতিতে কাজ করছে, আপনাকে ধন্যবাদ। আপনি আমার দিন বাঁচিয়েছেন।
মেহুল সোলঙ্কি

7

ImageViewআপনার নিজের বৃত্তাকার আয়তক্ষেত্রটি প্রসারিত এবং আঁকতে হবে।

আপনি যদি চিত্রটির চারপাশে একটি ফ্রেম চান তবে আপনি বিন্যাসে চিত্রের দেখার উপরে গোলাকার ফ্রেমটিও সুপারমোজ করতে পারবেন।

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


ধন্যবাদ. তবে ইমেজভিউয়ের জন্য কেবল সেটড্র্যাবলযোগ্য পদ্ধতি রয়েছে, আমি কীভাবে আমার চিত্রের সামগ্রীতে ইমেজভিউর ড্রবাবলকে সেট করতে পারি এবং তারপরে ইমেজভিউয়ের শীর্ষে একটি বৃত্তাকার ফ্রেমটি সুপারমোজ করব?
মাইকেল 20

আমি দুঃখিত, আমি অস্পষ্ট ছিলাম। আমি লেআউট superimposing বোঝানো: এইভাবে (বড়) একটি ব্যবহার FrameLayoutএকটি করা ImageViewএটা অন্য যোগ ImageViewবৃত্তাকার ফ্রেম সঙ্গে। সেভাবে প্রথমটি ImageViewআপনার নির্বাচিত চিত্র ImageFrameপ্রদর্শন করবে এবং দ্বিতীয়টি বৃত্তাকার ফ্রেমটি প্রদর্শন করবে।
মিঃস্বনফ্লেকে

সঠিক - ফ্রেমলআউট সহ আপনি একটি চিত্র / অন্যের সাথে ওভারলে করতে পারেন। আপনি ফ্রেমলাইআউটের অ্যান্ড্রয়েড: অগ্রভাগ ট্যাগটিও ব্যবহার করতে পারেন।
রিচার্ড লে ম্যাসুরিয়ার

7

রোমান গাই যেখানে আছে সেখানে।

নিম্নরূপিত সংস্করণ

Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.image)).getBitmap();

Bitmap bitmapRounded = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(bitmapRounded);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
canvas.drawRoundRect((new RectF(0.0f, 0.0f, bitmap.getWidth(), bitmap.getHeight())), 10, 10, paint);

imageView.setImageBitmap(bitmapRounded);

দুর্ভাগ্যক্রমে, যদিও এটি কাজ করে, তবে ঠিক এখানে সমাধানগুলির মতোই এটি বর্তমান ব্যবহার না করে একটি নতুন বিটম্যাপ তৈরি করে।
অ্যান্ড্রয়েড বিকাশকারী

আসলে তা না. বিটম্যাপ্রাউন্ডটি বারবার ব্যবহৃত হত। যদি আপনার আঁকার যোগ্য ক্যানভাসে অ্যাক্সেস থাকে তবে আপনি নতুন বিটম্যাপ তৈরির পরিবর্তে সরাসরি ড্র পদ্ধতিটি ব্যবহার করতে পারেন।
অ্যালেক্স

তুমি এটা কিভাবে করলে? ধরুন আমি কোনও বিশেষ অঙ্কনযোগ্য ব্যবহার করে না এবং কেবল একটি একক বিটম্যাপটি পরিচালনা করি এবং প্রক্রিয়া শেষে সেটআইমেজবিটম্যাপ ব্যবহার করি। আমি কীভাবে এমন জিনিস অর্জন করব?
অ্যান্ড্রয়েড বিকাশকারী


উভয় বিটম্যাপ পরিবর্তন করে না, তবে এটি একটি কাস্টম অঙ্কনযোগ্য এবং একটি কাস্টম চিত্রদর্শন ব্যবহার করে মোড়ানো। এটা আমি সম্পর্কে জিজ্ঞাসা করা হয় না। আমি জিজ্ঞাসা করলাম আপনি কীভাবে বিটম্যাপটি পরিবর্তন করবেন।
অ্যান্ড্রয়েড বিকাশকারী

7

এই খাঁটি এক্সএমএল সমাধানটি আমার ক্ষেত্রে যথেষ্ট ভাল ছিল। http://www.techrepublic.com/article/pro-tip-round-corners-on-an-android-imageview-with-this-hack/

সম্পাদনা

সংক্ষেপে উত্তর এখানে:

/ Res / অঙ্কনযোগ্য ফোল্ডারে একটি ফ্রেম.এক্সএমএল ফাইল তৈরি করুন। এটিতে আমরা বৃত্তাকার কোণ এবং স্বচ্ছ কেন্দ্র সহ একটি সাধারণ আয়তক্ষেত্রটি সংজ্ঞায়িত করি ।

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
     <solid android:color="#00ffffff" />
     <padding android:left="6dp"
        android:top="6dp"
        android:right="6dp"
        android:bottom="6dp" />
     <corners android:radius="12dp" />
     <stroke android:width="6dp" android:color="#ffffffff" />
</shape>

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:gravity="center" 
    android:background="#ffffffff">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="6dp"
        android:src="@drawable/tr"/>

    <FrameLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="6dp"
            android:src="@drawable/tr"/>

        <ImageView 
             android:src="@drawable/frame"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />

    </FrameLayout>

</LinearLayout>

সুন্দর ধারণা, আমি এটি একটি আন-ইভেন ভিউ কোণার দেখানোর জন্য ব্যবহার করেছি
গাল রোম

6

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

আমি জানি যে এই থ্রেডটি কিছুটা পুরানো, তবে কীভাবে অ্যান্ড্রয়েডে ইমেজভিজের কোণাগুলি ঘুরতে যায় তার জন্য গুগলের প্রশ্নের জন্য এটির শীর্ষ ফলাফলগুলির মধ্যে একটি।

/**
 * Use this method to scale a bitmap and give it specific rounded corners.
 * @param context Context object used to ascertain display density.
 * @param bitmap The original bitmap that will be scaled and have rounded corners applied to it.
 * @param upperLeft Corner radius for upper left.
 * @param upperRight Corner radius for upper right.
 * @param lowerRight Corner radius for lower right.
 * @param lowerLeft Corner radius for lower left.
 * @param endWidth Width to which to scale original bitmap.
 * @param endHeight Height to which to scale original bitmap.
 * @return Scaled bitmap with rounded corners.
 */
public static Bitmap getRoundedCornerBitmap(Context context, Bitmap bitmap, float upperLeft,
        float upperRight, float lowerRight, float lowerLeft, int endWidth,
        int endHeight) {
    float densityMultiplier = context.getResources().getDisplayMetrics().density;

    // scale incoming bitmap to appropriate px size given arguments and display dpi
    bitmap = Bitmap.createScaledBitmap(bitmap, 
            Math.round(endWidth * densityMultiplier),
            Math.round(endHeight * densityMultiplier), true);

    // create empty bitmap for drawing
    Bitmap output = Bitmap.createBitmap(
            Math.round(endWidth * densityMultiplier),
            Math.round(endHeight * densityMultiplier), Config.ARGB_8888);

    // get canvas for empty bitmap
    Canvas canvas = new Canvas(output);
    int width = canvas.getWidth();
    int height = canvas.getHeight();

    // scale the rounded corners appropriately given dpi
    upperLeft *= densityMultiplier;
    upperRight *= densityMultiplier;
    lowerRight *= densityMultiplier;
    lowerLeft *= densityMultiplier;

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);

    // fill the canvas with transparency
    canvas.drawARGB(0, 0, 0, 0);

    // draw the rounded corners around the image rect. clockwise, starting in upper left.
    canvas.drawCircle(upperLeft, upperLeft, upperLeft, paint);
    canvas.drawCircle(width - upperRight, upperRight, upperRight, paint);
    canvas.drawCircle(width - lowerRight, height - lowerRight, lowerRight, paint);
    canvas.drawCircle(lowerLeft, height - lowerLeft, lowerLeft, paint);

    // fill in all the gaps between circles. clockwise, starting at top.
    RectF rectT = new RectF(upperLeft, 0, width - upperRight, height / 2);
    RectF rectR = new RectF(width / 2, upperRight, width, height - lowerRight);
    RectF rectB = new RectF(lowerLeft, height / 2, width - lowerRight, height);
    RectF rectL = new RectF(0, upperLeft, width / 2, height - lowerLeft);

    canvas.drawRect(rectT, paint);
    canvas.drawRect(rectR, paint);
    canvas.drawRect(rectB, paint);
    canvas.drawRect(rectL, paint);

    // set up the rect for the image
    Rect imageRect = new Rect(0, 0, width, height);

    // set up paint object such that it only paints on Color.WHITE
    paint.setXfermode(new AvoidXfermode(Color.WHITE, 255, AvoidXfermode.Mode.TARGET));

    // draw resized bitmap onto imageRect in canvas, using paint as configured above
    canvas.drawBitmap(bitmap, imageRect, imageRect, paint);

    return output;
}

ঘনত্বের গুণক যোগ করতে এবং স্বতন্ত্রভাবে গোলাকার কোণগুলির জন্য সমর্থন যুক্ত করার জন্য +1। সমাধানটি আমি আসলে শীর্ষে দিয়েছি কারণ আপনার সমাধানটি বেশ কার্যকর হয়নি - তবে এটি খুব সহায়ক ছিল! আমার যৌগিক সমাধানটি নীচে দেখুন:
ক্যাস্পার হারমার

6

আপনার imageViewনীচে হিসাবে একটি আকার প্রয়োগ করুন :

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="#faf5e6" />
    <stroke
        android:width="1dp"
        android:color="#808080" />
    <corners android:radius="15dp" />
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />
</shape>

এটা আপনার বন্ধু হতে পারে।


6

ক্লিপিং কেন না draw()?

এখানে আমার সমাধান:

  • ক্লিপিংয়ের সাথে আপেক্ষিক লেআউট প্রসারিত করুন
  • বিন্যাসে ইমেজভিউ (বা অন্যান্য মতামত) রাখুন:

কোড:

public class RoundRelativeLayout extends RelativeLayout {

    private final float radius;

    public RoundRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray attrArray = context.obtainStyledAttributes(attrs,
                R.styleable.RoundRelativeLayout);
        radius = attrArray.getDimension(
                R.styleable.RoundRelativeLayout_radius, 0);
    }

    private boolean isPathValid;
    private final Path path = new Path();

    private Path getRoundRectPath() {
        if (isPathValid) {
            return path;
        }

        path.reset();

        int width = getWidth();
        int height = getHeight();
        RectF bounds = new RectF(0, 0, width, height);

        path.addRoundRect(bounds, radius, radius, Direction.CCW);
        isPathValid = true;
        return path;
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.clipPath(getRoundRectPath());
        super.dispatchDraw(canvas);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.clipPath(getRoundRectPath());
        super.draw(canvas);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int oldWidth = getMeasuredWidth();
        int oldHeight = getMeasuredHeight();
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int newWidth = getMeasuredWidth();
        int newHeight = getMeasuredHeight();
        if (newWidth != oldWidth || newHeight != oldHeight) {
            isPathValid = false;
        }
    }

}

1
আমি এই পদ্ধতির পছন্দ। আমি এটি আমার নিজস্ব রাউন্ডআইজেনভিউ তৈরি করতে ব্যবহার করেছি। এর জন্য ধন্যবাদ.
পাসকাল

এটি হার্ডওয়ার্ড ত্বরণ চালু করে, কাজ করে না? আমি খুব সহজ কাজ দেখতে পেলাম না ...
নিরাপদ বুট

আপনি কী দয়া করে এটি প্রদর্শন করতে পারেন, ফলাফলকে অঙ্কনযোগ্য হিসাবে তৈরি করে, সামগ্রীর চারপাশে একটি রূপরেখা (একেএ স্ট্রোক) যুক্ত করার ক্ষমতা থাকতে পারে এবং কেবল কয়েকটি কোণকে গোল করার মতো ক্ষমতাও রয়েছে?
অ্যান্ড্রয়েড বিকাশকারী

5

নিম্নলিখিতটি একটি বৃত্তাকার আয়তক্ষেত্র বিন্যাস বস্তু তৈরি করে যা এতে রাখা কোনও শিশু সামগ্রীর চারপাশে একটি বৃত্তাকার আয়তক্ষেত্র আঁকে। এটি প্রদর্শন করে যে লেআউট এক্সএমএল ফাইলগুলি ব্যবহার না করে প্রোগ্রামিয়ালি ভিউ এবং লেআউটগুলি কীভাবে তৈরি করা যায়।

package android.example;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MessageScreen extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  int mainBackgroundColor = Color.parseColor("#2E8B57");
  int labelTextColor = Color.parseColor("#FF4500");
  int messageBackgroundColor = Color.parseColor("#3300FF");
  int messageTextColor = Color.parseColor("#FFFF00");

  DisplayMetrics metrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(metrics);
  float density = metrics.density;
  int minMarginSize = Math.round(density * 8);
  int paddingSize = minMarginSize * 2;
  int maxMarginSize = minMarginSize * 4;

  TextView label = new TextView(this);
  /*
   * The LayoutParams are instructions to the Layout that will contain the
   * View for laying out the View, so you need to use the LayoutParams of
   * the Layout that will contain the View.
   */
  LinearLayout.LayoutParams labelLayoutParams = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  label.setLayoutParams(labelLayoutParams);
  label.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
  label.setPadding(paddingSize, paddingSize, paddingSize, paddingSize);
  label.setText(R.string.title);
  label.setTextColor(labelTextColor);

  TextView message = new TextView(this);
  RoundedRectangle.LayoutParams messageLayoutParams = new RoundedRectangle.LayoutParams(
 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
  /*
   * This is one of the calls must made to force a ViewGroup to call its
   * draw method instead of just calling the draw method of its children.
   * This tells the RoundedRectangle to put some extra space around the
   * View.
   */
  messageLayoutParams.setMargins(minMarginSize, paddingSize,
    minMarginSize, maxMarginSize);
  message.setLayoutParams(messageLayoutParams);
  message.setTextSize(TypedValue.COMPLEX_UNIT_SP, paddingSize);
  message.setText(R.string.message);
  message.setTextColor(messageTextColor);
  message.setBackgroundColor(messageBackgroundColor);

  RoundedRectangle messageContainer = new RoundedRectangle(this);
  LinearLayout.LayoutParams messageContainerLayoutParams = new LinearLayout.LayoutParams(
    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
  messageContainerLayoutParams.setMargins(paddingSize, 0, paddingSize, 0);
  messageContainer.setLayoutParams(messageContainerLayoutParams);
  messageContainer.setOrientation(LinearLayout.VERTICAL);
  /*
   * This is one of the calls must made to force a ViewGroup to call its
   * draw method instead of just calling the draw method of its children.
   * This tells the RoundedRectangle to color the the exta space that was
   * put around the View as well as the View. This is exterior color of
   * the RoundedRectangle.
   */
  messageContainer.setBackgroundColor(mainBackgroundColor);
  /*
   * This is one of the calls must made to force a ViewGroup to call its
   * draw method instead of just calling the draw method of its children.
   * This is the interior color of the RoundedRectangle. It must be
   * different than the exterior color of the RoundedRectangle or the
   * RoundedRectangle will not call its draw method.
   */
  messageContainer.setInteriorColor(messageBackgroundColor);
  // Add the message to the RoundedRectangle.
  messageContainer.addView(message);

  //
  LinearLayout main = new LinearLayout(this);
  LinearLayout.LayoutParams mainLayoutParams = new LinearLayout.LayoutParams(
    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
  main.setLayoutParams(mainLayoutParams);
  main.setOrientation(LinearLayout.VERTICAL);
  main.setBackgroundColor(mainBackgroundColor);
  main.addView(label);
  main.addView(messageContainer);

  setContentView(main);
 }
}

গোলাকার আয়তক্ষেত্র বিন্যাস বস্তুর জন্য শ্রেণিটি এখানে সংজ্ঞায়িত হিসাবে দেওয়া হয়েছে:

/**
 *  A LinearLayout that draws a rounded rectangle around the child View that was added to it.
 */
package android.example;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.widget.LinearLayout;

/**
 * A LinearLayout that has rounded corners instead of square corners.
 * 
 * @author Danny Remington
 * 
 * @see LinearLayout
 * 
 */
public class RoundedRectangle extends LinearLayout {
 private int mInteriorColor;

 public RoundedRectangle(Context p_context) {
  super(p_context);
 }

 public RoundedRectangle(Context p_context, AttributeSet attributeSet) {
  super(p_context, attributeSet);
 }

 // Listener for the onDraw event that occurs when the Layout is drawn.
 protected void onDraw(Canvas canvas) {
  Rect rect = new Rect(0, 0, getWidth(), getHeight());
  RectF rectF = new RectF(rect);
  DisplayMetrics metrics = new DisplayMetrics();
  Activity activity = (Activity) getContext();
  activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
  float density = metrics.density;
  int arcSize = Math.round(density * 10);

  Paint paint = new Paint();
  paint.setColor(mInteriorColor);

  canvas.drawRoundRect(rectF, arcSize, arcSize, paint);
 }

 /**
  * Set the background color to use inside the RoundedRectangle.
  * 
  * @param Primitive int - The color inside the rounded rectangle.
  */
 public void setInteriorColor(int interiorColor) {
  mInteriorColor = interiorColor;
 }

 /**
  * Get the background color used inside the RoundedRectangle.
  * 
  * @return Primitive int - The color inside the rounded rectangle.
  */
 public int getInteriorColor() {
  return mInteriorColor;
 }

}

5

Kotlin

import android.graphics.BitmapFactory
import android.os.Bundle
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory
import kotlinx.android.synthetic.main.activity_main.*

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.myImage)
val rounded = RoundedBitmapDrawableFactory.create(resources, bitmap)
rounded.cornerRadius = 20f
profileImageView.setImageDrawable(rounded)

ImageViewবিজ্ঞপ্তি তৈরি করতে আমরা এর cornerRadiusসাথে পরিবর্তন করতে পারি :

rounded.isCircular = true

4

প্রথম উত্তর দেওয়ার জন্য অনেক ধন্যবাদ। একটি আয়তক্ষেত্রাকার চিত্রটি একটি বর্গক্ষেত্রে রূপান্তর করতে সংস্করণটি দেওয়া হয়েছে (এবং বৃত্তাকার) এবং ভরাট রঙটি প্যারামিটার হিসাবে পাস হচ্ছে।

public static Bitmap getRoundedBitmap(Bitmap bitmap, int pixels, int color) {

    Bitmap inpBitmap = bitmap;
    int width = 0;
    int height = 0;
    width = inpBitmap.getWidth();
    height = inpBitmap.getHeight();

    if (width <= height) {
        height = width;
    } else {
        width = height;
    }

    Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, width, height);
    final RectF rectF = new RectF(rect);
    final float roundPx = pixels;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(inpBitmap, rect, rect, paint);

    return output;
}

4

আপনি যদি গ্লাইড লাইব্রেরি ব্যবহার করেন তবে এটি সহায়ক হবে:

Glide.with(getApplicationContext())
     .load(image_url)
     .asBitmap()
     .centerCrop()
     .into(new BitmapImageViewTarget(imageView) {
        @Override
        protected void setResource(Bitmap resource) {
          RoundedBitmapDrawable circularBitmapDrawable =
                       RoundedBitmapDrawableFactory.create(getApplicationContext().getResources(), resource);
          circularBitmapDrawable.setCornerRadius(dpToPx(10));
          circularBitmapDrawable.setAntiAlias(true);
          imageView.setImageDrawable(circularBitmapDrawable);
        }
     });


public int dpToPx(int dp) {
  DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
  return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}

গ্লাইড সংস্করণ 4 এবং তদূর্ধ্বের ব্যবহারটি ব্যবহার করা হলে --- রিকোয়েস্টঅপশনগুলির অনুরোধঅ্যাপশনগুলি = নতুন রিকোয়েস্টঅ্যাপশন (); অনুরোধঅપ્শনস = অনুরোধঅપ્শন.ট্রান্সফর্মস (নতুন সেন্টারক্রপ (), নতুন গোলকৃত কর্নার্স (16%); গ্লাইড.উইথ (আইটেম ভিউ.সেটকন্টেক্সট ()) .লোড (আইটেম.জেটমিমেশন ())। অ্যাপ্লিকেশন (রিকোয়েস্টঅ্যাপশন) .আইন্টো (এমপ্রগ্রামথম্বনেল);
বিশ্রুতি

3

যদি আপনার চিত্রটি ইন্টারনেটে থাকে তবে সবচেয়ে ভাল উপায় হ'ল গ্লাইড এবং RoundedBitmapDrawableFactory(এপিআই 21 থেকে - তবে সমর্থন লাইব্রেরিতে পাওয়া যায়) এর মতো:

 Glide.with(ctx).load(url).asBitmap().centerCrop().into(new BitmapImageViewTarget(imageView) {
    @Override
    protected void setResource(Bitmap res) {
        RoundedBitmapDrawable bitmapDrawable =
             RoundedBitmapDrawableFactory.create(ctx.getResources(), res);
        bitmapDrawable.setCircular(true);//comment this line and uncomment the next line if you dont want it fully cricular
        //circularBitmapDrawable.setCornerRadius(cornerRadius);
        imageView.setImageDrawable(bitmapDrawable);
    }
});

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

এই দরকারী যখন চিত্র resources এবং আপনি ব্যবহার করতে হবেcenterCrop
Artyom

3

আপনি কেবল ImageViewআপনার বিন্যাসে এবং ব্যবহার glideকরতে পারেন, আপনি এই পদ্ধতিটি ব্যবহার করে বৃত্তাকার কোণগুলি প্রয়োগ করতে পারেন।

আপনার গ্রেড লেখার আগে,

compile 'com.github.bumptech.glide:glide:3.7.0'

গোলাকার কোণ সহ চিত্রের জন্য,

public void loadImageWithCorners(String url, ImageView view) {
    Glide.with(context)
            .load(url)
            .asBitmap()
            .centerCrop()
            .placeholder(R.color.gray)
            .error(R.color.gray)
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(new BitmapImageViewTarget(view) {
                @Override
                protected void setResource(Bitmap resource) {
                    RoundedBitmapDrawable circularBitmapDrawable =
                            RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                    circularBitmapDrawable.setCornerRadius(32.0f); // radius for corners
                    view.setImageDrawable(circularBitmapDrawable);
                }
            });
}

কল পদ্ধতি:

loadImageWithCorners("your url","your imageview");

এটি HTTP অনুরোধের মাধ্যমে চিত্রগুলি লোড করার জন্য একটি লাইব্রেরি যুক্ত করবে, যা প্রশ্নের সাথে প্রাসঙ্গিক নয়।
ক্রিয়েটিভ ক্রিয়েটোরমায়াবেনোট

কোন পাঠাগারটি বোঝা হবে? চিত্র লোডের জন্য আপনি গ্লাইড এবং স্নিপেট ব্যবহার করতে পারেন এটি গ্লাইডের নিজস্ব পদ্ধতি এবং ক্লাসের উপর ভিত্তি করে। অন্য কোনও গ্রন্থাগার যুক্ত করার দরকার নেই
দীপ প্যাটেল

গ্লাইড মূলত HTTP- র মাধ্যমে চিত্রগুলি লোড করার জন্য একটি গ্রন্থাগার, তবে ওপি কীভাবে কোণার গোল করতে হয় তা জানতে চেয়েছিল ImageView
ক্রিয়েটিভ ক্রিয়েটরিওমায়বেনোট

2

এখানে পুনঃনির্দেশিত প্রশ্নের উত্তর: "কীভাবে অ্যান্ড্রয়েডে একটি বিজ্ঞপ্তি চিত্রকল্প তৈরি করবেন?"

public static Bitmap getRoundBitmap(Bitmap bitmap) {

    int min = Math.min(bitmap.getWidth(), bitmap.getHeight());

    Bitmap bitmapRounded = Bitmap.createBitmap(min, min, bitmap.getConfig());

    Canvas canvas = new Canvas(bitmapRounded);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
    canvas.drawRoundRect((new RectF(0.0f, 0.0f, min, min)), min/2, min/2, paint);

    return bitmapRounded;
}

2

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

    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.setCornerRadius(10); //drawable.setCircular(true);
                imgProfilePicture.setImageDrawable(drawable);
            }
        });

2

যেগুলি গ্লাইড এবং কোটলিন ব্যবহার করছে তাদের জন্য, আপনি প্রসারিত করে তা অর্জন করতে পারেন RequestBuilder

fun <T> GlideRequest<T>.roundCorners(cornerRadius: Int) =
    apply(RequestOptions().transform(RoundedCorners(cornerRadius)))

এবং হিসাবে ব্যবহার;

 GlideApp.with(context)
            .load(url)
            .roundCorners(context.resources.getDimension(R.dimen.radius_in_dp).toInt())
            .into(imgView)

.গ্রাউন্ডকর্নার্স আসছে না আমাদের কি আর কিছু সেটআপ করার দরকার আছে?
ডাঃ এএনড্রো

আপনি কি roundCornersউপরে হিসাবে এক্সটেনশন ফাংশন যুক্ত করেছেন? @ Dr.aNdRO
ডিজিঙ্গুলকান

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