android - ইউট - বৃত্তাকার কোণ দিয়ে একটি চিত্র ভিউ কিভাবে করবেন?




ইউটিউব ভিডিও প্রমোট (20)

Android এ, একটি চিত্র ভিউ ডিফল্টরূপে একটি আয়তক্ষেত্র। ImageView এ কিভাবে আমি এটি একটি বৃত্তাকার আয়তক্ষেত্র (আমার বিটম্যাপের চতুর্ভুজ আয়তনের চতুর্ভুজকে ক্লিপ করে) করতে পারি?


Romain গাই এটা যেখানে হয়।

নিম্নরূপ minified সংস্করণ।

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);

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

আপনি যদি চিত্রের চারপাশে একটি ফ্রেম চান তবে আপনি লেআউটের চিত্র দৃশ্যে শীর্ষে বৃত্তাকার ফ্রেমটিকেও উচ্চমানের করতে পারেন।

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


আমি কাস্টম ImageView দ্বারা কাজ করেছেন:

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

আউটপুট:

এই আপনি সাহায্য করবে আশা করি।


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

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

/**
 * 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;
}

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

সম্পাদনা

এখানে সংক্ষিপ্তভাবে উত্তর দেওয়া হল:

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

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

একটি This যা আপনাকে চিত্রের আকারগুলি আকৃতির মঞ্জুরি দেয়।

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

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

ফলাফল:


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

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


বৃত্তাকার আকৃতির ক্লিপিং API এ 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"
  • এই documentation অনুযায়ী, তারপর আপনাকে যা করতে হবে তা হল android:clipToOutline="true" যোগ করুন android:clipToOutline="true"

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

  • আপনার কার্যকলাপ বা টুকরা: ImageView.setClipToOutline(true)

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

বিঃদ্রঃ:

এই পদ্ধতি কোনো আঁকা আকৃতির জন্য কাজ করে (শুধু বৃত্তাকার নয়)। এটি আপনার Drawable xml- এ আপনি সংজ্ঞায়িত করেছেন এমন আকারের রূপরেখাটিতে ImageView ক্লিপ করবে।

ImageViews সম্পর্কে বিশেষ নোট

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

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

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

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

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

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

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

প্রথম, সেটআপ Glide সংস্করণ 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);

here ইমেজ 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 ফাইল ডাউনলোড করতে পারেন


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

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

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));
}

উত্তর অনেক উত্তর!

আমি এই উদাহরণটি অনুসরণ করেছি যা কয়েকজনকে খুব একটা পরামর্শ দিয়েছে: http://www.techrepublic.com/article/pro-tip-round-corners-on-an-android-imageview-with-this-hack/

যাইহোক, আমার যা প্রয়োজন তা একটি স্বচ্ছ চিত্রের পিছনে একটি রঙীন বৃত্ত ছিল। যে কেউ যে একই আগ্রহী আগ্রহী ...

1) ফ্রেমএলআউটটি প্রস্থ এবং উচ্চতাতে সেট করুন - আমার ক্ষেত্রে চিত্রটির আকার (50 ডিপি)।
2) ইমেজ ভিউ রাখুন যার মধ্যে srcView "src =" @ এটি একটি আইডি দিন, আমার ক্ষেত্রে আমি আইকনশেপ বলেছি
3) অঙ্কনযোগ্য mask.xml #ffffffff এর একটি কঠিন রঙ থাকা উচিত 4) যদি আপনি গতিশীলভাবে আপনার কোডের বৃত্তের রঙ পরিবর্তন করতে চান তবে

ImageView iv2 = (ImageView) v.findViewById(R.id.iconShape);
Drawable shape = getResources().getDrawable(R.drawable.mask);
shape.setColorFilter(Color.BLUE, Mode.MULTIPLY);
iv2.setImageDrawable(shape);

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

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);
}

}

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

আমি শুধু overrided setImageDrawableএবং বৃত্তাকার বিটম্যাপ drawable জন্য সমর্থন v4 পদ্ধতি ব্যবহার।

ব্যবহার:

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

ছবি দেখুন এবং কাস্টম ইমেজ সঙ্গে প্রাকদর্শন দেখুন:


এখানে পুনঃনির্দেশিত প্রশ্নটির উত্তর দিন: "Android এ একটি বৃত্তাকার চিত্র ভিউ কিভাবে তৈরি করবেন?"

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;
}

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>

এটা আপনার বন্ধু সহায়ক হতে পারে।


আপনি এই লাইব্রেরি চেষ্টা করতে পারেন - RoundedImageView

এটা:

বৃত্তাকার কোণ, ovals, এবং চেনাশোনা সমর্থন করে এমন একটি দ্রুত চিত্র ভিউ। CircleImageView একটি সম্পূর্ণ সুপারসেট।

আমি আমার প্রকল্পে এটি ব্যবহার করেছি, এবং এটি খুব সহজ।


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

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;
}

যদি আপনার ছবিটি ইন্টারনেটে থাকে তবে সর্বোত্তম উপায়টি গ্লাইড ব্যবহার করে এবং RoundedBitmapDrawableFactory(API 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);
    }
});






rounded-corners