एंड्रॉइड में ImageView पर बॉर्डर जोड़ने के तरीके
यह गाइड ImageView पर बॉर्डर/स्ट्रोक जोड़ने के कई दृष्टिकोण दिखाता है: XML ड्रॉएबल, प्रोग्रामेटिकली, और मॉडर्न Material Components।
विधि 1: Shape Drawable (XML) - सबसे सरल
res/drawable/image_border.xml
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="4dp"
android:color="#00FFFF" />
<corners android:radius="8dp" />
<!-- वैकल्पिक: पैडिंग -->
<padding
android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp" />
</shape>
लेआउट में उपयोग
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:background="@drawable/image_border"
android:padding="4dp"
android:scaleType="centerCrop"
android:src="@drawable/your_image" />
विधि 2: Layer-List (मल्टीपल बॉर्डर/इफेक्ट्स)
<layer-list xmlns:android="https://schemas.android.com/apk/res/android">
<!-- बाहरी बॉर्डर -->
<item>
<shape android:shape="rectangle">
<stroke android:width="6dp" android:color="#FF5722" />
<corners android:radius="12dp" />
</shape>
</item>
<!-- आंतरिक स्पेस -->
<item android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<corners android:radius="6dp" />
</shape>
</item>
</layer-list>
विधि 3: प्रोग्रामेटिकली (GradientDrawable)
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
GradientDrawable border = new GradientDrawable();
border.setShape(GradientDrawable.RECTANGLE);
border.setStroke(8, Color.parseColor("#00FF00")); // चौड़ाई, रंग
border.setCornerRadius(16); // कोना त्रिज्या
// border.setColor(Color.TRANSPARENT); // बैकग्राउंड पारदर्शी
imageView.setBackground(border);
imageView.setPadding(8, 8, 8, 8); // इमेज और बॉर्डर के बीच स्पेस
}
}
विधि 4: MaterialCardView (मॉडर्न, अनुशंसित)
build.gradle
implementation "com.google.android.material:material:1.10.0"
लेआउट
<com.google.android.material.card.MaterialCardView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
app:strokeWidth="4dp"
app:strokeColor="#6200EE"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/your_image" />
</com.google.android.material.card.MaterialCardView>
विधि 5: कस्टम View (Canvas ड्राइंग) - पूर्ण नियंत्रण
public class BorderedImageView extends AppCompatImageView {
private Paint borderPaint;
private float borderWidth = 4f;
private int borderColor = Color.BLACK;
private float cornerRadius = 0f;
public BorderedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
private void init(AttributeSet attrs) {
borderPaint = new Paint();
borderPaint.setStyle(Paint.Style.STROKE);
borderPaint.setAntiAlias(true);
borderPaint.setStrokeWidth(borderWidth);
borderPaint.setColor(borderColor);
// एट्रिब्यूट्स पार्स करें यदि XML में परिभाषित हैं
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rect = new RectF(
borderWidth / 2,
borderWidth / 2,
getWidth() - borderWidth / 2,
getHeight() - borderWidth / 2
);
canvas.drawRoundRect(rect, cornerRadius, cornerRadius, borderPaint);
}
// सेटर्स...
}
तुलना तालिका
| विधि | जटिलता | पक्ष | विपक्ष |
|---|---|---|---|
| Shape Drawable | कम | सरल, XML-ओनली, लाइटवेट | सीमित इफेक्ट्स |
| Layer-List | मीडियम | मल्टीपल लेयर्स, कॉम्प्लेक्स इफेक्ट्स | अधिक XML |
| GradientDrawable (कोड) | मीडियम | रनटाइम बदलाव, डायनामिक | कोड आवश्यक |
| MaterialCardView | कम | मटेरियल डिजाइन, एलिवेशन, रिपल | अतिरिक्त व्यूग्रुप |
| कस्टम View | उच्च | पूर्ण नियंत्रण, एनिमेशन | जटिल, मेंटेनेंस |
गोलाकार इमेज के लिए (CircleImageView स्टाइल)
<!-- Shape drawable के साथ -->
<shape android:shape="oval">
<stroke android:width="4dp" android:color="#FFFFFF" />
<size android:width="100dp" android:height="100dp" />
</shape>
<!-- या MaterialCardView -->
<com.google.android.material.card.MaterialCardView
app:cardCornerRadius="50dp"
app:strokeWidth="4dp"
android:layout_width="100dp"
android:layout_height="100dp">
<ImageView ... />
</com.google.android.material.card.MaterialCardView>
बेस्ट प्रैक्टिस
- सरल बॉर्डर के लिए: Shape Drawable
- मटेरियल ऐप्स के लिए: MaterialCardView
- डायनामिक/एनिमेटेड बॉर्डर: GradientDrawable कोड में या कस्टम View
- हमेशा
android:paddingयाCardViewकंटेंट पैडिंग का उपयोग करें इमेज और बॉर्डर के बीच स्पेस के लिए - स्केलेबिलिटी के लिए वेक्टर ड्रॉएबल्स का उपयोग करें