অ্যান্ড্রয়েডে কোনও চিত্র দেখার জন্য সীমানা?


337

আমি কীভাবে কোনওটির জন্য একটি সীমানা নির্ধারণ করতে পারি ImageView এবং অ্যান্ড্রয়েডে এর রঙ পরিবর্তন ?


1
ইমেজভিউয়ের রঙ পরিবর্তন করার জন্য আমার কাছে একটি উত্তর রয়েছে , আশা সাহায্য করতে পারে।
রুজ

উত্তর:


566

আমি নীচের এক্সএমএলটিকে চিত্রনযোগ্য হিসাবে চিত্রের পটভূমিতে সেট করেছি। এটা কাজ করে।

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


112
এবং তারপরে যোগ android:background="@drawable/yourXmlFileName"করুনImageView
মিথুন শ্রীধরণ

10
বর্ডারটি বাম এবং ডান উভয়ই কাজ করে, তবে উপরে এবং নীচে এটি পিতামাতাকে উপরের অংশে পূর্ণ করে।
মরিস

3
ওহ ভাল, আমিও তাই চাই। আপনার ইমেজভিউয়ের জন্য প্যাডিং সেট করতে ভুলবেন না।
পান্নাঘিউ

5
@ মরিস আপনি ক্রপটোপ্যাডিংটি সত্যতে সেট করতে পারেন।
মিক্কোপ

4
Dont = "সত্য" সেট cropToPadding ভুলবেন
Landry

164

নীচে আমি নীচে কালো সীমানা ব্যবহার করতাম কোডটি। মনে রাখবেন যে আমি সীমানার জন্য অতিরিক্ত এক্সএমএল ফাইল ব্যবহার করি নি।

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/red_minus_icon"
    android:background="#000000"
    android:padding="1dp"/>

29
হ্যাঁ .. এটিকে দেখতে সীমানার মতো লাগছে। তবে যখন আপনি স্বচ্ছ পটভূমি সহ একটি অঙ্কনযোগ্য চিত্র ব্যবহার করেন, তখন এটি সীমানার সাথে আপনার চিত্রটি সঠিকভাবে প্রদর্শন করবে না। এটি আপনার স্বচ্ছ হতে পারে যেখানেই কালো রঙ দেখায়। সুতরাং আপনার উত্তর সেরা পদ্ধতির নয়।
প্রবীণ

19
হ্যাঁ! তবে অন্য একটি এক্সএমএল ফাইল তৈরি না করেই আপনার সীমানা রয়েছে।
ব্যবহারকারী 609239

7
আপনি যখন চিত্রটি ব্যবহার করে পুনরায় আকার দিন তখন এটি কাজ করে না android:scaleType="centerCrop"
সিলক্স

8
এটি খারাপ কারণ এটি অপ্রয়োজনীয় ওভারড্র তৈরি করে
জয় সোয়ার

1
সিলক্সের জন্য scaleType="centerCrop", আরও যোগ করার বিষয়টি নিশ্চিত করুনcropToPadding="true"
অ্যাডাম জনস

24

এটি আমার জানা একটি পুরানো পোস্ট, তবে আমি ভেবেছিলাম এটি সম্ভবত কাউকে সাহায্য করতে পারে।

যদি আপনি এমন একটি স্বচ্ছ সীমানা অনুকরণ করতে চান যা আকারের "কঠিন" রঙের সাথে ওভারল্যাপ না করে তবে আপনার এক্সএমএল এ এটি ব্যবহার করুন। মনে রাখবেন যে আমি এখানে "স্ট্রোক" ট্যাগটি মোটেও ব্যবহার করি না কারণ এটি সর্বদা আসল অঙ্কিত আকারটিকে ওভারল্যাপ করে বলে মনে হচ্ছে।

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

আমি এটি খুব পছন্দ করি তবে আপনি যদি বাইরের প্রান্তগুলি খুব ছোট করে থাকেন তবে কোণগুলি ফাঁকা। এটি 2 ডিপি এবং উপরের যে কোনও কিছু নিয়ে ভাল কাজ করে।
জন স্ট্যাক

এই পদ্ধতির সুবিধা হ'ল এটি গোলাকার কোণগুলির জন্য অনুমতি দেয়। যদি আপনি পূর্ববর্তী উত্তর থেকে ওভারল্যাপের সীমানাটি না চান তবে ইমেজভিউ ট্যাগে প্যাডিং যুক্ত করুন। এই পদ্ধতির অপূর্ণতা হ'ল সীমারেখাটি যদি কোনও ট্রান্সফুল্যান্ট ব্যাকগ্রাউন্ড ব্যবহার করে তবে চিত্রের অঞ্চলে রক্তক্ষরণ হবে। তাই আমি পূর্ববর্তী পদ্ধতিটি বেছে নিই কারণ আমি গোলাকার কোণগুলির চেয়ে স্বচ্ছ পটভূমি পছন্দ করি।
লিও ল্যান্ডাউ

24

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

2
এটির জন্য কেবল একটি নোট, যদি চিত্রটি গতিশীলভাবে সেট করা থাকে তবে চিত্রটি সীমান্তের ওপারে রেখে অন্য কোডটি বর্ডারে আবার সেট করতে হবে।
রব 85

4

বর্ডার তৈরি করুন

আপনার অঙ্কনযোগ্য ফোল্ডারে নিম্নলিখিত লিখিত সামগ্রী সহ একটি এক্সএমএল ফাইল (যেমন "ফ্রেম_ইমেজ_ভিউ.এক্সএমএল") তৈরি করুন:

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


3

রেস / ড্রয়যোগ্য / পটভূমি.এক্সএমএল এর মতো অঙ্কনযোগ্য একটি পটভূমি যুক্ত করুন:

<?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 আঁকতে চান তবে ইমেজভিউ প্যাডিং বাদ দিন।


3

এটি উপরে ব্যবহৃত হয়েছে তবে একচেটিয়াভাবে উল্লেখ করা হয়নি।

setCropToPadding(boolean);

যদি সত্য হয় তবে চিত্রটি তার প্যাডিংয়ের মধ্যে উপযুক্ত হবে।

এটি ImageViewউত্সটিকে প্যাডিংয়ের মধ্যে এর পটভূমিতে যুক্ত করার যোগ্য করে তুলবে ।

এক্সএমএল এর মাধ্যমে এটি নীচের মতো করা যেতে পারে-

android:cropToPadding="true"

2

এই কোডটি পুনরায় / আঁকতে আপনার অবশ্যই একটি পটভূমি.এক্সএমএল তৈরি করতে হবে

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

2

যারা কাস্টম বর্ডার এবং ইমেজভিউর আকারটি অনুসন্ধান করছেন 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"/>

1

আমি প্রায় এই সম্পর্কে ছেড়ে দিয়েছি।

চিত্রটি লোড করতে গ্লাইড ব্যবহার করে এটি আমার শর্ত, বৃত্তাকার কোণার রূপান্তরগুলি সম্পর্কে এখানে বিস্তারিত গ্লাইড ইস্যুটি দেখুন এবং এখানে

আমি আমার জন্যও একই বৈশিষ্ট্যগুলি রেখেছি 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"

দুর্ভাগ্যক্রমে এটি আমাকে নীচের চিত্রের মতো "সুন্দর নয়" সীমান্ত কোণে দিচ্ছে:

এখানে চিত্র বর্ণনা লিখুন


0

আমি এটি করা এত সহজ করে পেয়েছি:

1) কন্টেন্টটি ভিতরে রাখার জন্য ফ্রেমটিকে সম্পাদনা করুন (9patch সরঞ্জাম সহ)।

2) এর ImageViewভিতরে একটি রাখুন Linearlayout, এবং ফ্রেমের পটভূমি বা রঙের পটভূমি হিসাবে আপনার পছন্দ হিসাবে সেট করুন Linearlayout। আপনি যখন ফ্রেমটিকে নিজের ভিতরে সামগ্রী রাখার জন্য সেট করেছেন তখন আপনার ফ্রেমের ভিতরে ImageViewথাকবে (ঠিক যেখানে আপনি 9patch সরঞ্জামের সাহায্যে সামগ্রীটি সেট করেছেন)।


0

এই দীর্ঘ সমস্যার জন্য আমার সহজ সমাধানটি নিম্নলিখিতটি।

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

নিম্নলিখিত উত্তরে আমি এটি যথেষ্ট ভাল ব্যাখ্যা করেছি, দয়া করে এটিও একবার দেখুন!

আমি আশা করি এটি অন্য কারও পক্ষে সহায়ক হবে!


0

একই এক্সএমএলে আমি পরবর্তী ব্যবহার করেছি:

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

0

প্রথমে আপনার সীমানার রঙ হিসাবে আপনি যে পটভূমির রঙ চান তা যুক্ত করার আগে এখানে চিত্র বর্ণনা লিখুন

ক্রপটিপ্যাডিংটিকে সত্যে পরিবর্তন করুন এবং এর পরে প্যাডিং যুক্ত করুন।

তারপরে আপনার ইমেজভিউয়ের জন্য আপনার সীমানা থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.