Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में ImageView के लिए बॉर्डर कैसे सेट करें?

एंड्रॉइड में 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 कंटेंट पैडिंग का उपयोग करें इमेज और बॉर्डर के बीच स्पेस के लिए
  • स्केलेबिलिटी के लिए वेक्टर ड्रॉएबल्स का उपयोग करें
  1. एंड्रॉइड में दो इमेज को ओवरले करके ImageView में कैसे सेट करें? एंड्रॉइड में दो इमेज को ओवरले करके ImageView में कैसे सेट करें?

    एंड्रॉइड में लेयर-लिस्ट से दो इमेज ओवरले करना यह उदाहरण दिखाता है कि <layer-list> ड्रॉएबल का उपयोग करके दो इमेज को मर्ज करके ImageView में कैसे प्रदर्शित किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/acti

  1. Android में AsyncTask के लिए टाइमआउट कैसे सेट करें? Android में AsyncTask के लिए टाइमआउट कैसे सेट करें?

    परिचय यह ट्यूटोरियल दिखाता है कि AsyncTask के लिए टाइमआउट कैसे सेट करें। ध्यान दें: AsyncTask API 30 (Android 11) में डिप्रिकेटेड है। आधुनिक ऐप्स के लिए Coroutines, RxJava, या ExecutorService उपयोग करें। यह उदाहरण केवल लिगेसी कोड समझने के लिए है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studi

  1. Java में JCheckBox पर बॉर्डर कैसे सेट करें? Java में JCheckBox पर बॉर्डर कैसे सेट करें?

    एक JCheckBox एक घटक है जो JToggleButton को विस्तारित कर सकता है और JCheckBox का एक ऑब्जेक्ट एक विकल्प को दर्शाता है जिसे चेक किया गया या अनचेक किया गया हो सकता है। यदि दो या अधिक विकल्प हैं तो इन विकल्पों का कोई भी संयोजन एक ही समय में चुना जा सकता है। हम setBorder() विधि का उपयोग करके JCheckBox घट