বৃত্তাকার কোণগুলি দিয়ে আমি কীভাবে একটি বিন্যাস তৈরি করতে পারি? আমি আমার উপর বৃত্তাকার কোণ প্রয়োগ করতে চান LinearLayout
।
বৃত্তাকার কোণগুলি দিয়ে আমি কীভাবে একটি বিন্যাস তৈরি করতে পারি? আমি আমার উপর বৃত্তাকার কোণ প্রয়োগ করতে চান LinearLayout
।
উত্তর:
1: অঙ্কনযোগ্যগুলিতে বিন্যাস_বিজি.এক্সএমএল সংজ্ঞায়িত করুন :
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke android:width="3dp" android:color="#B1BCBE" />
<corners android:radius="10dp"/>
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
2: layout_bg.xml
আপনার লেআউটে ব্যাকগ্রাউন্ড হিসাবে যুক্ত করুন
android:background="@drawable/layout_bg"
Element shape doesn't have the required attribute android:layout_height
?
Element shape doesn't have the required attribute android:layout_height
ত্রুটিটি দেখানোর কারণ লেআউট_বিজি.এক্সএমএল অঙ্কনযোগ্য ফোল্ডারের ভিতরে ছিল না।
21++ এর জন্য, ক্লিপ দর্শন ব্যবহার করুন
বৃত্তাকার আউটলাইন ক্লিপিং View
এপিআই 21- এ শ্রেণিতে যুক্ত করা হয়েছিল more আরও তথ্যের জন্য এই প্রশিক্ষণ ডক বা এই রেফারেন্সটি দেখুন।
এই অন্তর্নির্মিত বৈশিষ্ট্যটি বৃত্তাকার কোণগুলি কার্যকর করা খুব সহজ করে তোলে। এটি যে কোনও ভিউ বা বিন্যাসে কাজ করে এবং যথাযথ ক্লিপিং সমর্থন করে।
করণীয় এখানে:
android:background="@drawable/round_outline"
android:clipToOutline="true"
দুর্ভাগ্যক্রমে, একটি বাগ রয়েছে বলে মনে হচ্ছে এবং এই এক্সএমএল বৈশিষ্ট্যটি বর্তমানে স্বীকৃত নয়। ভাগ্যক্রমে, আমরা জাভাতে ক্লিপিং সেট করতে পারি:
View.setClipToOutline(true)
এটা কিসের মত দেখতে:
ইমেজভিউ সম্পর্কে বিশেষ দ্রষ্টব্য
setClipToOutline()
শুধুমাত্র তখনই কাজ করা হয় যখন ভিউ এর পটভূমি একটি আকার আঁকতে সেট করা হয়। যদি এই ব্যাকগ্রাউন্ড শেপটি বিদ্যমান থাকে, দেখুন ক্লিপিং এবং শেডিংয়ের উদ্দেশ্যে পটভূমির বাহ্যরেখাটিকে সীমানা হিসাবে বিবেচনা করে।
এর অর্থ হ'ল আপনি যদি ইমেজভিউতে কোণগুলি দিয়ে গোল করতে চান তবে setClipToOutline()
আপনার চিত্রটি অবশ্যই এর android:src
পরিবর্তে আসতে হবে android:background
(যেহেতু ব্যাকগ্রাউন্ডটি গোলাকার আকারের জন্য ব্যবহৃত হয়)। আপনি যদি src এর পরিবর্তে নিজের চিত্র সেট করতে পটভূমি ব্যবহার করেন তবে আপনি এই নেস্টেড ভিউগুলি ব্যবহার করতে পারবেন:
src=@drawable...
পরিবর্তে আমার ব্যবহার সম্পর্কে নোট পড়েছেন background=@drawable
? আপনি হয় তা করতে পারেন বা একটি চিত্র ধারকের ভিতরে বাসা বাঁধতে পারেন যা আকারের বাহ্যরেখা ধারণ করে।
একটি সাদা ব্যাকগ্রাউন্ড, কালো সীমানা এবং বৃত্তাকার কোণগুলির সাথে একটি অঙ্কনযোগ্য তৈরি করতে এখানে একটি এক্সএমএল ফাইলের একটি অনুলিপি রয়েছে:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<stroke android:width="3dp"
android:color="#ff000000"
/>
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
/>
<corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp" android:topRightRadius="7dp"/>
</shape>
এটি অঙ্কনযোগ্য ডিরেক্টরিতে একটি এক্সএমএল ফাইল হিসাবে সংরক্ষণ করুন, এটির মতো ব্যবহার করুন যেমন আপনি কোনও অঙ্কনযোগ্য পটভূমি (আইকন বা রিসোর্স ফাইল) এর সংস্থার নাম ব্যবহার করে (আর।
<corners android:radius="7dp" />
অ্যান্ড্রয়েড ভি 7 সমর্থন লাইব্রেরিতে কার্ডভিউ ব্যবহার করুন। যদিও এটি কিছুটা ভারী, এটি সমস্ত সমস্যা সমাধান করে এবং যথেষ্ট সহজ। সেট অঙ্কনযোগ্য পটভূমি পদ্ধতির মতো নয়, এটি সাবভিউগুলি সফলভাবে ক্লিপ করতে পারে।
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@android:color/transparent"
card_view:cardCornerRadius="5dp"
card_view:cardElevation="0dp"
card_view:contentPadding="0dp">
<YOUR_LINEARLAYOUT_HERE>
</android.support.v7.widget.CardView>
আমি এইভাবে করেছি:
স্ক্রিনশট পরীক্ষা করুন:
তৈরি করুন অঙ্কনযোগ্য সঙ্গে নামের ফাইল custom_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/white" />
<corners android:radius="10dip" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
এখন ভিউতে আয়তক্ষেত্রের পটভূমি প্রয়োগ করুন :
mView.setBackground(R.drawlable.custom_rectangle);
সম্পন্ন
আমি মনে করি এটি করার একটি আরও ভাল উপায় হ'ল 2 টি জিনিস একত্রিত করা:
হিসাবে দেখানো বিটম্যাপ থেকে একটি বৃত্তাকার অঙ্কনযোগ্য করতে, এখানে
একটি চিত্রভিউতে অঙ্কনযোগ্য সেট করুন।
এটি অন্যান্য সমাধানগুলি সমাধান করতে ব্যর্থ হয়েছে এমন কেসগুলি পরিচালনা করবে যেমন কোণায় থাকা সামগ্রী রয়েছে।
আমি মনে করি এটি আরও কিছুটা জিপিইউ-বান্ধব, কারণ এটি 2 এর পরিবর্তে একক স্তর দেখায়।
একমাত্র আরও ভাল উপায় হ'ল সম্পূর্ণ কাস্টমাইজড ভিউ করা, তবে এটি প্রচুর কোড এবং অনেক সময় নিতে পারে। আমি মনে করি যে আমি এখানে যা পরামর্শ দিয়েছি তা উভয় বিশ্বের সেরা।
এটি কীভাবে করা যায় তার একটি স্নিপেট এখানে দেওয়া হয়েছে:
RoundedCornersDrawable.java
/**
* shows a bitmap as if it had rounded corners. based on :
* http://rahulswackyworld.blogspot.co.il/2013/04/android-drawables-with-rounded_7.html
* easy alternative from support library: RoundedBitmapDrawableFactory.create( ...) ;
*/
public class RoundedCornersDrawable extends BitmapDrawable {
private final BitmapShader bitmapShader;
private final Paint p;
private final RectF rect;
private final float borderRadius;
public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap, final float borderRadius) {
super(resources, bitmap);
bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
final Bitmap b = getBitmap();
p = getPaint();
p.setAntiAlias(true);
p.setShader(bitmapShader);
final int w = b.getWidth(), h = b.getHeight();
rect = new RectF(0, 0, w, h);
this.borderRadius = borderRadius < 0 ? 0.15f * Math.min(w, h) : borderRadius;
}
@Override
public void draw(final Canvas canvas) {
canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
}
}
CustomView.java
public class CustomView extends ImageView {
private View mMainContainer;
private boolean mIsDirty=false;
// TODO for each change of views/content, set mIsDirty to true and call invalidate
@Override
protected void onDraw(final Canvas canvas) {
if (mIsDirty) {
mIsDirty = false;
drawContent();
return;
}
super.onDraw(canvas);
}
/**
* draws the view's content to a bitmap. code based on :
* http://nadavfima.com/android-snippet-inflate-a-layout-draw-to-a-bitmap/
*/
public static Bitmap drawToBitmap(final View viewToDrawFrom, final int width, final int height) {
// Create a new bitmap and a new canvas using that bitmap
final Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bmp);
viewToDrawFrom.setDrawingCacheEnabled(true);
// Supply measurements
viewToDrawFrom.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.EXACTLY));
// Apply the measures so the layout would resize before drawing.
viewToDrawFrom.layout(0, 0, viewToDrawFrom.getMeasuredWidth(), viewToDrawFrom.getMeasuredHeight());
// and now the bmp object will actually contain the requested layout
canvas.drawBitmap(viewToDrawFrom.getDrawingCache(), 0, 0, new Paint());
return bmp;
}
private void drawContent() {
if (getMeasuredWidth() <= 0 || getMeasuredHeight() <= 0)
return;
final Bitmap bitmap = drawToBitmap(mMainContainer, getMeasuredWidth(), getMeasuredHeight());
final RoundedCornersDrawable drawable = new RoundedCornersDrawable(getResources(), bitmap, 15);
setImageDrawable(drawable);
}
}
সম্পাদনা: "রাউন্ডকর্নারলআউটস" লাইব্রেরির উপর ভিত্তি করে একটি দুর্দান্ত বিকল্প পাওয়া গেছে । একটি বৃত্ত রয়েছে যা আপনার প্রসারিত করতে চান এমন লেআউট ক্লাসগুলির জন্য ব্যবহার করা হবে, গোল করা হবে:
//based on https://github.com/JcMinarro/RoundKornerLayouts
class CanvasRounder(cornerRadius: Float, cornerStrokeColor: Int = 0, cornerStrokeWidth: Float = 0F) {
private val path = android.graphics.Path()
private lateinit var rectF: RectF
private var strokePaint: Paint?
var cornerRadius: Float = cornerRadius
set(value) {
field = value
resetPath()
}
init {
if (cornerStrokeWidth <= 0)
strokePaint = null
else {
strokePaint = Paint()
strokePaint!!.style = Paint.Style.STROKE
strokePaint!!.isAntiAlias = true
strokePaint!!.color = cornerStrokeColor
strokePaint!!.strokeWidth = cornerStrokeWidth
}
}
fun round(canvas: Canvas, drawFunction: (Canvas) -> Unit) {
val save = canvas.save()
canvas.clipPath(path)
drawFunction(canvas)
if (strokePaint != null)
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, strokePaint)
canvas.restoreToCount(save)
}
fun updateSize(currentWidth: Int, currentHeight: Int) {
rectF = android.graphics.RectF(0f, 0f, currentWidth.toFloat(), currentHeight.toFloat())
resetPath()
}
private fun resetPath() {
path.reset()
path.addRoundRect(rectF, cornerRadius, cornerRadius, Path.Direction.CW)
path.close()
}
}
তারপরে আপনার প্রতিটি কাস্টমাইজড লেআউট ক্লাসে এই জাতীয় কোড যুক্ত করুন:
class RoundedConstraintLayout : ConstraintLayout {
private lateinit var canvasRounder: CanvasRounder
constructor(context: Context) : super(context) {
init(context, null, 0)
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
init(context, attrs, 0)
}
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {
init(context, attrs, defStyle)
}
private fun init(context: Context, attrs: AttributeSet?, defStyle: Int) {
val array = context.obtainStyledAttributes(attrs, R.styleable.RoundedCornersView, 0, 0)
val cornerRadius = array.getDimension(R.styleable.RoundedCornersView_corner_radius, 0f)
val cornerStrokeColor = array.getColor(R.styleable.RoundedCornersView_corner_stroke_color, 0)
val cornerStrokeWidth = array.getDimension(R.styleable.RoundedCornersView_corner_stroke_width, 0f)
array.recycle()
canvasRounder = CanvasRounder(cornerRadius,cornerStrokeColor,cornerStrokeWidth)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
setLayerType(FrameLayout.LAYER_TYPE_SOFTWARE, null)
}
}
override fun onSizeChanged(currentWidth: Int, currentHeight: Int, oldWidth: Int, oldheight: Int) {
super.onSizeChanged(currentWidth, currentHeight, oldWidth, oldheight)
canvasRounder.updateSize(currentWidth, currentHeight)
}
override fun draw(canvas: Canvas) = canvasRounder.round(canvas) { super.draw(canvas) }
override fun dispatchDraw(canvas: Canvas) = canvasRounder.round(canvas) { super.dispatchDraw(canvas) }
}
আপনি যদি বৈশিষ্ট্যগুলি সমর্থন করতে চান তবে এটি লাইব্রেরিতে লিখিত হিসাবে ব্যবহার করুন:
<resources>
<declare-styleable name="RoundedCornersView">
<attr name="corner_radius" format="dimension"/>
<attr name="corner_stroke_width" format="dimension"/>
<attr name="corner_stroke_color" format="color"/>
</declare-styleable>
</resources>
অন্য বিকল্প, যা বেশিরভাগ ব্যবহারের পক্ষে সহজ হতে পারে: মেটেরিয়ালকার্ডভিউ ব্যবহার করুন। এটি বৃত্তাকার কোণগুলি, স্ট্রোকের রঙ এবং প্রস্থ এবং উচ্চতাকে কাস্টমাইজ করতে দেয়।
উদাহরণ:
<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" android:clipChildren="false" android:clipToPadding="false"
tools:context=".MainActivity">
<com.google.android.material.card.MaterialCardView
android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center"
app:cardCornerRadius="8dp" app:cardElevation="8dp" app:strokeColor="#f00" app:strokeWidth="2dp">
<ImageView
android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0f0"/>
</com.google.android.material.card.MaterialCardView>
</FrameLayout>
এবং ফলাফল:
মনে রাখবেন যে স্ট্রোকের প্রান্তগুলিতে কিছুটা শৈল্পিক সমস্যা রয়েছে (যদি আপনি এটি ব্যবহার করেন তবে সামগ্রীটির কিছু পিক্সেল রেখে দেয়)। আপনি যদি জুম করেন তবে আপনি এটি লক্ষ্য করতে পারেন I've আমি এই সমস্যাটি সম্পর্কে এখানে রিপোর্ট করেছি ।
সম্পাদনা: স্থির হয়ে গেছে বলে মনে হচ্ছে, তবে IDE তে নেই। এখানে রিপোর্ট করা ।
এটা চেষ্টা কর...
1 চিত্র অঙ্কনযোগ্য এক্সএমএল তৈরি করুন (কাস্টম_লেআউটআউট.এক্সএমএল):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#FFFFFF" />
<stroke
android:width="2dp"
android:color="#FF785C" />
<corners android:radius="10dp" />
</shape>
আপনার দর্শনের ব্যাকগ্রাউন্ড যুক্ত করুন
android:background="@drawable/custom_layout"
আপনি যদি আপনার লেআউটটিকে বৃত্তাকার করতে চান তবে কার্ডভিউ ব্যবহার করা ভাল, এটি নকশাটিকে সুন্দর করতে অনেকগুলি বৈশিষ্ট্য সরবরাহ করেছে।
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".3"
android:text="@string/quote_code"
android:textColor="@color/white"
android:textSize="@dimen/text_head_size" />
</LinearLayout>
</android.support.v7.widget.CardView>
এই কার্ড_ভিউয়ের সাথে: কার্ডকর্নারডিয়াস = "5 ডিপি", আপনি ব্যাসার্ধ পরিবর্তন করতে পারেন।
আপনার লেআউটে কার্ড_ব্যাকগ্রাউন্ড অঙ্কনযোগ্য ব্যবহার করা সবচেয়ে সহজ এবং সহজ পদ্ধতি হবে । এটি গুগলের উপাদান নকশা নির্দেশিকাও অনুসরণ করে। এটি কেবল আপনার মধ্যে অন্তর্ভুক্ত করুন লিনিয়ারলআউট:
android:background="@drawable/card_background"
এটি আপনার আঁকতে সক্ষম ডিরেক্টরিতে যুক্ত করুন এবং নাম দিন ___গ্রাউন্ড.এক্সএমএল :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#BDBDBD"/>
<corners android:radius="5dp"/>
</shape>
</item>
<item
android:left="0dp"
android:right="0dp"
android:top="0dp"
android:bottom="2dp">
<shape android:shape="rectangle">
<solid android:color="#ffffff"/>
<corners android:radius="5dp"/>
</shape>
</item>
</layer-list>
যে কোনও বিন্যাসের জন্য বৃত্তাকার প্রান্তগুলি পেতে কার্ডভিউ ব্যবহার করুন। ব্যবহারের card_view: cardCornerRadius = "5dp" cardview জন্য বৃত্তাকার বিন্যাস প্রান্ত জন্য।
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="15dp"
android:weightSum="1">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".3"
android:text="@string/quote_code"
android:textColor="@color/white"
android:textSize="@dimen/text_head_size" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".7"
android:text="@string/quote_details"
android:textColor="@color/white"
android:textSize="@dimen/text_head_size" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
এটি করার আরও ভাল উপায় হ'ল:
background_activity.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="fill">
<color android:color="@color/black"/>
</item>
<item>
<shape android:gravity="fill">
<solid android:color="@color/white"/>
<corners android:radius="10dip"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>
</item>
</layer-list>
এটি এপিআই 21 এর নীচেও কাজ করবে এবং আপনাকে এরকম কিছু দেবে:
আপনি যদি আরও কিছু প্রচেষ্টা আরও ভাল নিয়ন্ত্রণ করতে ইচ্ছুক হন তবে android.support.v7.widget.CardView
তার cardCornerRadius
বৈশিষ্ট্যটি ব্যবহার করুন (এবং কার্ডভিউয়ের সাথে কোনও ড্রপ ছায়া থেকে মুক্তি পেতে elevation
অ্যাট্রিবিউট সেট করুন 0dp
)। এছাড়াও, এটি এপিআই স্তর থেকে কম 15 হিসাবে কাজ করবে।
প্রোগ্রাম কোণে সেট কোণার ব্যাসার্ধের জন্য ফাংশন
static void setCornerRadius(GradientDrawable drawable, float topLeft,
float topRight, float bottomRight, float bottomLeft) {
drawable.setCornerRadii(new float[] { topLeft, topLeft, topRight, topRight,
bottomRight, bottomRight, bottomLeft, bottomLeft });
}
static void setCornerRadius(GradientDrawable drawable, float radius) {
drawable.setCornerRadius(radius);
}
ব্যবহার
GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setColor(Color.GREEN);
setCornerRadius(gradientDrawable, 20f);
//or setCornerRadius(gradientDrawable, 20f, 40f, 60f, 80f);
view.setBackground(gradientDrawable);
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke android:width="3dip" android:color="#B1BCBE" />
<corners android:radius="10dip"/>
<padding android:left="3dip" android:top="3dip" android:right="3dip" android:bottom="3dip" />
</shape>
@ ডেভিড, মাত্র স্ট্রোকের মতো প্যাডিং রাখুন, যাতে চিত্র নির্বিশেষে সীমানা দৃশ্যমান হতে পারে
প্যারামিটারগুলি কী প্রভাব ফেলবে তা সম্পর্কে আপনাকে যুক্তিসঙ্গত ধারণা জানাতে আমি আমার মন্তব্যগুলির সাথে @ গৌরবসাপিয়েন্সের উত্তর নিয়েছি।
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Background color -->
<solid android:color="@color/white" />
<!-- Stroke around the background, width and color -->
<stroke android:width="4dp" android:color="@color/drop_shadow"/>
<!-- The corners of the shape -->
<corners android:radius="4dp"/>
<!-- Padding for the background, e.g the Text inside a TextView will be
located differently -->
<padding android:left="10dp" android:right="10dp"
android:bottom="10dp" android:top="10dp" />
</shape>
যদি আপনি কেবল এমন কোনও আকৃতি তৈরি করতে সন্ধান করছেন যা কোণে গোল করে, প্যাডিং সরিয়ে স্ট্রোক করবে। আপনি যদি শক্তটিকে সরিয়ে ফেলেন তবে আপনি কার্যকরভাবে স্বচ্ছ পটভূমিতে বৃত্তাকার কোণ তৈরি করতে পারবেন।
অলস হওয়ার জন্য আমি নীচে একটি আকৃতি তৈরি করেছি, যা গোলাকার কোণগুলির সাথে কেবল একটি শক্ত সাদা পটভূমি - উপভোগ করুন! :)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Background color -->
<solid android:color="@color/white" />
<!-- The corners of the shape -->
<corners android:radius="4dp"/>
</shape>
আপনার এক্সএমএল অঙ্কনযোগ্য তৈরি করুন, layout_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/your_colour" />
<stroke
android:width="2dp"
android:color="@color/your_colour" />
<corners android:radius="10dp" />
</shape>
<--width, color, radius should be as per your requirement-->
এবং তারপরে, এটি আপনারটিতে যুক্ত করুন layout.xml
android:background="@drawable/layout_background"
উপাদান উপাদান লাইব্রেরির সাহায্যে আপনি কাস্টম আকারগুলি আঁকারMaterialShapeDrawable
জন্য ব্যবহার করতে পারেন ।
আপনার এক্সএমএল লেআউটে কেবল লিনিয়ারলআউটটি রাখুন:
<LinearLayout
android:id="@+id/linear_rounded"
android:layout_width="match_parent"
android:layout_height="wrap_content"
..>
<!-- content ..... -->
</LinearLayout>
তারপরে আপনার কোডটিতে আপনি একটি প্রয়োগ করতে পারেন ShapeAppearanceModel
। কিছুটা এইরকম:
float radius = getResources().getDimension(R.dimen.default_corner_radius);
LinearLayout linearLayout= findViewById(R.id.linear_rounded);
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
.toBuilder()
.setAllCorners(CornerFamily.ROUNDED,radius)
.build();
MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
//Fill the LinearLayout with your color
shapeDrawable.setFillColor(ContextCompat.getColorStateList(this,R.color.secondaryLightColor));
ViewCompat.setBackground(linearLayout,shapeDrawable);
দ্রষ্টব্য :: এর জন্য উপাদান উপাদান লাইব্রেরির 1.1.0 সংস্করণ প্রয়োজন requires
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="@dimen/_10sdp"
android:shape="rectangle">
<solid android:color="@color/header" />
<corners
android:bottomLeftRadius="@dimen/_5sdp"
android:bottomRightRadius="@dimen/_5sdp"
android:topLeftRadius="@dimen/_5sdp"
android:topRightRadius="@dimen/_5sdp" />