উত্তর:
আমি নীচের এক্সএমএলটিকে চিত্রনযোগ্য হিসাবে চিত্রের পটভূমিতে সেট করেছি। এটা কাজ করে।
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<stroke android:width="1dp" android:color="#000000" />
<padding android:left="1dp" android:top="1dp" android:right="1dp"
android:bottom="1dp" />
</shape>
এবং তারপরে android:background="@drawable/yourXmlFileName"
আপনার যুক্ত করুনImageView
android:background="@drawable/yourXmlFileName"
করুনImageView
নীচে আমি নীচে কালো সীমানা ব্যবহার করতাম কোডটি। মনে রাখবেন যে আমি সীমানার জন্য অতিরিক্ত এক্সএমএল ফাইল ব্যবহার করি নি।
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/red_minus_icon"
android:background="#000000"
android:padding="1dp"/>
android:scaleType="centerCrop"
।
scaleType="centerCrop"
, আরও যোগ করার বিষয়টি নিশ্চিত করুনcropToPadding="true"
এটি আমার জানা একটি পুরানো পোস্ট, তবে আমি ভেবেছিলাম এটি সম্ভবত কাউকে সাহায্য করতে পারে।
যদি আপনি এমন একটি স্বচ্ছ সীমানা অনুকরণ করতে চান যা আকারের "কঠিন" রঙের সাথে ওভারল্যাপ না করে তবে আপনার এক্সএমএল এ এটি ব্যবহার করুন। মনে রাখবেন যে আমি এখানে "স্ট্রোক" ট্যাগটি মোটেও ব্যবহার করি না কারণ এটি সর্বদা আসল অঙ্কিত আকারটিকে ওভারল্যাপ করে বলে মনে হচ্ছে।
<?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="#55111111" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<solid android:color="#ff252525" />
</shape>
</item>
</layer-list>
ImageView
এক্সএমএল ফাইলে
<ImageView
android:id="@+id/myImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="1dp"
android:scaleType="centerCrop"
android:cropToPadding="true"
android:background="@drawable/border_image"
android:src="@drawable/ic_launcher" />
নামের সাথে কোডের নীচে সংরক্ষণ করুন border_image.xml
এবং এটি আঁকতে সক্ষম ফোল্ডারে থাকা উচিত
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#ffffff"
android:startColor="#ffffff" />
<corners android:radius="0dp" />
<stroke
android:width="0.7dp"
android:color="#b4b4b4" />
</shape>
আপনি যদি চিত্রের সীমানায় বৃত্তাকার কোণার দিতে চান তবে আপনি সীমানা.এক্সএমএল ফাইলটিতে একটি লাইন পরিবর্তন করতে পারেন
<corners android:radius="4dp" />
আপনার অঙ্কনযোগ্য ফোল্ডারে নিম্নলিখিত লিখিত সামগ্রী সহ একটি এক্সএমএল ফাইল (যেমন "ফ্রেম_ইমেজ_ভিউ.এক্সএমএল") তৈরি করুন:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="@dimen/borderThickness"
android:color="@color/borderColor" />
<padding
android:bottom="@dimen/borderThickness"
android:left="@dimen/borderThickness"
android:right="@dimen/borderThickness"
android:top="@dimen/borderThickness" />
<corners android:radius="1dp" /> <!-- remove line to get sharp corners -->
</shape>
প্রতিস্থাপন করুন @dimen/borderThickness
এবং @color/borderColor
আপনি যা চান বা তার সাথে সংশ্লিষ্ট মাত্রা / রঙ যুক্ত করুন।
আপনার ইমেজভিউতে অঙ্কনযোগ্যটিকে পটভূমি হিসাবে যুক্ত করুন:
<ImageView
android:id="@+id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/frame_image_view"
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
আপনাকে ব্যবহার করতে হবে android:cropToPadding="true"
, অন্যথায় সংজ্ঞায়িত প্যাডিংয়ের কোনও প্রভাব নেই। android:padding="@dimen/borderThickness"
এটি অর্জনের জন্য বিকল্প হিসাবে আপনার ইমেজভিউতে ব্যবহার করুন। যদি বর্ডারটি আপনার ইমেজভিউয়ের পরিবর্তে পিতামাতাকে ফ্রেম করে দেয় তবে ব্যবহার করার চেষ্টা করুন android:adjustViewBounds="true"
।
কোডে আপনার সীমানার রঙ পরিবর্তন করার সবচেয়ে সহজ উপায় হ'ল টিন্টব্যাকগাউন্ড বৈশিষ্ট্যটি।
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED); // changes border color to red
অথবা
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));
আপনার সংজ্ঞায়িত করতে ভুলবেন না newColor
।
রেস / ড্রয়যোগ্য / পটভূমি.এক্সএমএল এর মতো অঙ্কনযোগ্য একটি পটভূমি যুক্ত করুন:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="@android:color/black" />
</shape>
রেজ্য / লেআউট / foo.xML এ চিত্রভিউ পটভূমি আপডেট করুন:
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:background="@drawable/background"
android:src="@drawable/bar" />
...
যদি আপনি ব্যাকগ্রাউন্ডের উপর দিয়ে src আঁকতে চান তবে ইমেজভিউ প্যাডিং বাদ দিন।
এটি উপরে ব্যবহৃত হয়েছে তবে একচেটিয়াভাবে উল্লেখ করা হয়নি।
setCropToPadding(boolean);
যদি সত্য হয় তবে চিত্রটি তার প্যাডিংয়ের মধ্যে উপযুক্ত হবে।
এটি ImageView
উত্সটিকে প্যাডিংয়ের মধ্যে এর পটভূমিতে যুক্ত করার যোগ্য করে তুলবে ।
এক্সএমএল এর মাধ্যমে এটি নীচের মতো করা যেতে পারে-
android:cropToPadding="true"
এই কোডটি পুনরায় / আঁকতে আপনার অবশ্যই একটি পটভূমি.এক্সএমএল তৈরি করতে হবে
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="6dp" />
<stroke
android:width="6dp"
android:color="@android:color/white" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
যারা কাস্টম বর্ডার এবং ইমেজভিউর আকারটি অনুসন্ধান করছেন For আপনি অ্যান্ড্রয়েড-আকৃতি-চিত্র দেখুন
শুধু compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
আপনার যোগ করুনbuild.gradle
।
এবং আপনার বিন্যাসে ব্যবহার করুন।
<com.github.siyamed.shapeimageview.BubbleImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/neo"
app:siArrowPosition="right"
app:siSquare="true"/>
আমি প্রায় এই সম্পর্কে ছেড়ে দিয়েছি।
চিত্রটি লোড করতে গ্লাইড ব্যবহার করে এটি আমার শর্ত, বৃত্তাকার কোণার রূপান্তরগুলি সম্পর্কে এখানে বিস্তারিত গ্লাইড ইস্যুটি দেখুন এবং এখানে
আমি আমার জন্যও একই বৈশিষ্ট্যগুলি রেখেছি ImageView
, প্রত্যেকে এখানে 1 , এখানে 2 এবং এখানে 3 উত্তর দেয়
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"`
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/path_to_rounded_drawable"
তবে এখনও কোনও সাফল্য পাওয়া যায়নি।
কিছুক্ষণ গবেষণা করার পরে, এই এসও উত্তরটিforeground
থেকে একটি বৈশিষ্ট্য ব্যবহার করে এখানে একটি ফলাফল দিনandroid:foreground="@drawable/all_round_border_white"
দুর্ভাগ্যক্রমে এটি আমাকে নীচের চিত্রের মতো "সুন্দর নয়" সীমান্ত কোণে দিচ্ছে:
আমি এটি করা এত সহজ করে পেয়েছি:
1) কন্টেন্টটি ভিতরে রাখার জন্য ফ্রেমটিকে সম্পাদনা করুন (9patch সরঞ্জাম সহ)।
2) এর ImageView
ভিতরে একটি রাখুন Linearlayout
, এবং ফ্রেমের পটভূমি বা রঙের পটভূমি হিসাবে আপনার পছন্দ হিসাবে সেট করুন Linearlayout
। আপনি যখন ফ্রেমটিকে নিজের ভিতরে সামগ্রী রাখার জন্য সেট করেছেন তখন আপনার ফ্রেমের ভিতরে ImageView
থাকবে (ঠিক যেখানে আপনি 9patch সরঞ্জামের সাহায্যে সামগ্রীটি সেট করেছেন)।
এই দীর্ঘ সমস্যার জন্য আমার সহজ সমাধানটি নিম্নলিখিতটি।
<FrameLayout
android:layout_width="112dp"
android:layout_height="112dp"
android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
android:layout_marginRight="16dp" <!-- May vary according to your needs -->
android:layout_centerVertical="true">
<!-- following imageView acts as the boarder which sitting in the background of our main container ImageView -->
<ImageView
android:layout_width="112dp"
android:layout_height="112dp"
android:background="#000"/>
<!-- following imageView holds the image as the container to our image -->
<!-- layout_margin defines the width of our boarder, here it's 1dp -->
<ImageView
android:layout_width="110dp"
android:layout_height="110dp"
android:layout_margin="1dp"
android:id="@+id/itemImageThumbnailImgVw"
android:src="@drawable/banana"
android:background="#FFF"/> </FrameLayout>
নিম্নলিখিত উত্তরে আমি এটি যথেষ্ট ভাল ব্যাখ্যা করেছি, দয়া করে এটিও একবার দেখুন!
আমি আশা করি এটি অন্য কারও পক্ষে সহায়ক হবে!
একই এক্সএমএলে আমি পরবর্তী ব্যবহার করেছি:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff" <!-- border color -->
android:padding="3dp"> <!-- border width -->
<ImageView
android:layout_width="160dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop" />
</RelativeLayout>