অ্যান্ড্রয়েডে ইমেজবটনে চিত্র ফিট করুন


147

আমার ক্রিয়াকলাপে আমার 6 ইমেজবটন রয়েছে, আমি তাদেরগুলিতে আমার কোডের মাধ্যমে চিত্রগুলি সেট করি (এক্সএমএল ব্যবহার করি না)।

আমি তাদের 75% বোতামের অঞ্চলটি কভার করতে চাই। তবে যেখানে কিছু চিত্র কম অঞ্চল কভার করে, কিছু কিছু চিত্রব্লুটের সাথে মানানসই আকারে বড়। কীভাবে অগ্রগতিতে পুনরায় আকার দিন এবং সেগুলি দেখান? নীচে স্ক্রিন শট দেওয়া আছে

এখানে চিত্র বর্ণনা লিখুন নীচে এক্সএমএল-ফাইল রয়েছে

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     >
   <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">
        <ImageButton          

            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_topleft"
        android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"
            />
        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_topright"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_repeat"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     
             />

              <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_next"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"     
             />

    </LinearLayout>    
   <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_bottomleft"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"                                 
             />
        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:id="@+id/button_bottomright"
    android:layout_marginBottom="5sp"
        android:layout_marginLeft="2sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"                  
            />        
    </LinearLayout>        

</LinearLayout>

এবং myClass.java এর একটি স্নিপেট:

public void addImageButtons()
    {
        iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
        iB_topright = (ImageButton) findViewById(R.id.button_topright);
        iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
        iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
        iB_next = (ImageButton) findViewById(R.id.button_next);
        iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
    }

    public void setImageNextAndRepeat()
    {

    iB_topleft .setImageResource(R.drawable.aa);
        iB_topright.setImageResource(R.drawable.bb);   

    iB_bottomleft.setImageResource(R.drawable.cc);
        iB_bottomright.setImageResource(R.drawable.dd);   

        iB_next.setImageResource(R.drawable.next);
        iB_repeat.setImageResource(R.drawable.repeat);      
    }

2
আপনি কী স্কেলিং-পদ্ধতি অ্যান্ড্রয়েড সরবরাহগুলি পরীক্ষা করেছেন? বিকাশকারী.অ্যান্ড্রয়েড.
com

উত্তর:


393

আমি তাদের 75% বোতামের অঞ্চলটি কভার করতে চাই।

ব্যবহার android:padding="20dp"বোতামটিতে চিত্রটি কী পরিমাণ নেয় তা নিয়ন্ত্রণ করতে (প্রয়োজনীয়ভাবে প্যাডিং সামঞ্জস্য করুন) ।

তবে যেখানে কিছু চিত্র কম অঞ্চল কভার করে, কিছু কিছু চিত্রব্লুটের সাথে মানানসই আকারে বড়। কীভাবে অগ্রগতিতে পুনরায় আকার দিন এবং সেগুলি দেখান?

ব্যবহার করা android:scaleType="fitCenter"চিত্রগুলি অ্যান্ড্রয়েড স্কেল করতে এবং android:adjustViewBounds="true"স্কেলিংয়ের কারণে তাদের সীমানা সামঞ্জস্য করতে।

এই বৈশিষ্ট্যগুলির প্রত্যেকটিই কোডটিতে সেট করা যেতে পারে ImageButton রানটাইম সময় । তবে আমার মতে xML এ সেট করা এবং পূর্বরূপ দেখতে অনেক সহজ to

এছাড়াও, পাঠ্য আকার ব্যতীত অন্য কোনও কিছুর জন্য ব্যবহার করবেন নাsp , এটি ব্যবহারকারী নির্ধারিত পাঠ্য আকারের পছন্দ অনুসারে মাপা হয়, সুতরাং spব্যবহারকারীর যদি "বৃহত" পাঠ্য সেটিং থাকে তবে আপনার মাত্রাগুলি আপনার ইচ্ছার চেয়ে বড় হবে। dpপরিবর্তে ব্যবহার করুন, কারণ এটি ব্যবহারকারীর পাঠ্য আকারের পছন্দকে মাপেনি।

প্রতিটি বোতামের দেখতে কেমন হওয়া উচিত তার একটি স্নিপেট এখানে দেওয়া হয়েছে:

    <ImageButton
        android:id="@+id/button_topleft"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="0dp"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:padding="20dp"
        android:scaleType="fitCenter" />

নমুনা বোতাম


@ স্টেভেন বাইলে দেরিতে প্রতিক্রিয়াটির জন্য দুঃখিত, তবে আমি কীভাবে এটি প্রয়োগ করতে পারি তবে আপেক্ষিক বিন্যাসের জন্য?
আমরা সমস্ত পাগল এখানে

8
যারা খুঁজছেন তাদের জন্য, ImageButtonপদ্ধতিগুলি setScaleType(ImageView.ScaleType.CENTER) setAdjustViewBounds(true)প্রোগ্রামটিভভাবে এটি করে।
PS95

আপনাকে অনেক ধন্যবাদ :)
পঙ্কজ নিমগাদে

1
অ্যান্ড্রয়েডও করুন: ব্যাকগ্রাউন্ড = "@ নাল" ডিফল্ট ব্যাকগ্রাউন্ড চেষ্টা করতে
সি আইকঙ্গো

31

আমি নিম্নলিখিত কোড ব্যবহার করছি xml

android:adjustViewBounds="true"
android:scaleType="centerInside"

2
আমার পরিবর্তে "ফ্ল্যাট" আয়তক্ষেত্র রয়েছে এবং এটি আমার পক্ষে ভাল কাজ করে ... একটি ধরা পড়ার পরে: নিশ্চিত করুন যে আপনি "অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড" এর পরিবর্তে "android: src" ব্যবহার করছেন use +1 টি।
জনি উ

@ জোহনি এই সঙ্গমের জন্য ধন্যবাদ সহচর!
বিজন

8

android:scaleType="fitXY"আই-ইমেজবাটন এক্সএমএল ব্যবহার করার চেষ্টা করুন


যদিও এটি কাজ করেছে এবং মাপা হয়েছে, তবে আমি চেয়েছিলাম যে এটির আরও ভাল দৃশ্যমানতার জন্য 75৫% অঞ্চলটি কভার করা উচিত।
আরডিএক্স

@ পাওয়ারপিসি 75% উচ্চতা এবং প্রস্থকে ফ্রেমলআউট ব্যবহার করার চেষ্টা করুন এবং সেই ফ্রেমের বিন্যাসে আপনার চিত্রবটনটি এবং স্কেল টাইপটি এক্সএইউয়ের সাথে ফিট করুন
অদলবদল-আইওএস-অ্যান্ড্রয়েড

লিনিয়ারলেটের ভিতরে প্রতিটি ইমেজবটনের ফ্রেমআউট? আপনি কি স্পষ্ট করে বলতে পারবেন
আরডিএক্স

@PowerPC আমি এই ব্যবহার না কিন্তু এই লিঙ্কে সাহায্য করতে পারেন stackoverflow.com/questions/9946580/...
সোয়াপ-iOS-অ্যান্ড্রয়েড

1
@ স্টিভেনবাইল আমি উভয় পদ্ধতির বিষয়টি বিবেচনা করেছি, তবে যেহেতু আমি %৫% অঞ্চল কভারেজ চেয়েছিলাম, আপনার সমাধানটি ভাল কাজ করেছে। ধন্যবাদ।
আরডিএক্স


3

নীচের লিঙ্কটি দেখুন এবং আপনি কী চান তা অনুসন্ধান করার চেষ্টা করুন:

ইমেজভিউ.স্কেলটাইপ সেন্টার ভিউতে চিত্রটি কেন্দ্র করুন, তবে কোনও স্কেলিং সম্পাদন করবেন না।

ইমেজভিউ.স্কেলটাইপ সেন্ট সেন্ট্রোকপ চিত্রটি সমানভাবে স্কেল করুন (চিত্রটির দিকের অনুপাত বজায় রাখুন) যাতে উভয় মাত্রা (প্রস্থ এবং উচ্চতা) ভিউয়ের সাথে সম্পর্কিত মাত্রা (বিয়োগ প্যাডিং) এর সমান বা বড় হবে।

ইমেজভিউ.স্কেলটাইপ CENTER_INSIDE চিত্রটি সমানভাবে স্কেল করুন (চিত্রের দিক অনুপাত বজায় রাখুন) যাতে উভয় মাত্রা (প্রস্থ এবং উচ্চতা) ভিউয়ের সাথে সম্পর্কিত মাত্রা (বিয়োগ প্যাডিং) এর সমান বা কম হবে।

ইমেজভিউ.স্কেলটাইপ FIT_CENTER সেন্টার ব্যবহার করে চিত্রটি স্কেল করুন।

ইমেজভিউ.স্কেলটাইপ FIT_END এন্ড ব্যবহার করে চিত্রটি স্কেল করুন।

ইমেজভিউ.স্কেলটাইপ FIT_START START ব্যবহার করে চিত্রটি স্কেল করুন।

ইমেজভিউ.স্কেলটাইপ FIT_XY ফিল ব্যবহার করে চিত্রটি স্কেল করুন।

চিত্র অঙ্কন করার সময় চিত্র ম্যাট্রিক্স ব্যবহার করে ইমেজভিউ.স্কেলটাইপ ম্যাট্রিক্স স্কেল।

https://developer.android.com/reference/android/widget/ImageView.ScaleType.html


1

আমি সম্প্রতি দুর্ঘটনাক্রমে জানতে পেরেছি যেহেতু আপনার একটি চিত্রভিউতে আপনার আরও নিয়ন্ত্রণ রয়েছে যে আপনি এখানে একটি চিত্রের জন্য একটি অনক্লিক্লেস্টার সেট করতে পারেন এটি একটি গতিশীলভাবে তৈরি চিত্র বোতামের নমুনা is

private int id;
private bitmap bmp;
    LinearLayout.LayoutParams familyimagelayout = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT );

    final ImageView familyimage = new ImageView(this);
            familyimage.setBackground(null);
            familyimage.setImageBitmap(bmp);
            familyimage.setScaleType(ImageView.ScaleType.FIT_START);
            familyimage.setAdjustViewBounds(true);
            familyimage.setId(id);
            familyimage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //what you want to do put here
                }
            });

এটি কোনও খারাপ ধারণা নয়। আমি পছন্দ করি.
বোরিস কার্লোফ

0

এটা আমার ক্ষেত্রে ভাল কাজ করেছে। প্রথমত, আপনি একটি চিত্র ডাউনলোড করেন এবং আইকনমেজ হিসাবে এটির পুনরায় নামকরণ করেন, এটিকে অঙ্কনীয় ফোল্ডারে খুঁজে পাবেন। আপনি সেটিংস android:layout_widthবা আকারের মাধ্যমে আকার পরিবর্তন করতে পারেন android:layout_height। অবশেষে, আমরা আছে

 <ImageButton
        android:id="@+id/answercall"
        android:layout_width="120dp"
        android:layout_height="80dp"
        android:src="@drawable/iconimage"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:scaleType="fitCenter" />

0

আমি যেমন করেছিলাম তেমনি আপনার ইমেজবটন উইজেটটি তৈরি করতে পারেন। আমার ক্ষেত্রে, আমার একটি নির্দিষ্ট আইকন আকারের একটি উইজেট দরকার। আসুন কাস্টম বৈশিষ্ট্য থেকে শুরু করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ImageButtonFixedIconSize">
        <attr name="imageButton_icon" format="reference" />
        <attr name="imageButton_iconWidth" format="dimension" />
        <attr name="imageButton_iconHeight" format="dimension" />
    </declare-styleable>
</resources>

উইজেট শ্রেণিটি বেশ সহজ (মূল পয়েন্টটি অন - লেআউট পদ্ধতিতে গণনা প্যাডিং হয় ):

class ImageButtonFixedIconSize
@JvmOverloads
constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = android.R.attr.imageButtonStyle
) : ImageButton(context, attrs, defStyleAttr) {

    private lateinit var icon: Drawable

    @Px
    private var iconWidth: Int = 0
    @Px
    private var iconHeight: Int = 0

    init {
        scaleType = ScaleType.FIT_XY
        attrs?.let { retrieveAttributes(it) }
    }

    /**
     *
     */
    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        val width = right - left
        val height = bottom - top

        val horizontalPadding = if(width > iconWidth) (width - iconWidth) / 2 else 0
        val verticalPadding = if(height > iconHeight) (height - iconHeight) / 2 else 0

        setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding)

        setImageDrawable(icon)

        super.onLayout(changed, left, top, right, bottom)
    }

    /**
     *
     */
    private fun retrieveAttributes(attrs: AttributeSet) {
        val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ImageButtonFixedIconSize)

        icon = typedArray.getDrawable(R.styleable.ImageButtonFixedIconSize_imageButton_icon)!!

        iconWidth = typedArray.getDimension(R.styleable.ImageButtonFixedIconSize_imageButton_iconWidth, 0f).toInt()
        iconHeight = typedArray.getDimension(R.styleable.ImageButtonFixedIconSize_imageButton_iconHeight, 0f).toInt()

        typedArray.recycle()
    }
}

এবং শেষ অবধি আপনার উইজেটটি এভাবে ব্যবহার করা উচিত:

<com.syleiman.gingermoney.ui.common.controls.ImageButtonFixedIconSize
    android:layout_width="90dp"
    android:layout_height="63dp"

    app:imageButton_icon="@drawable/ic_backspace"
    app:imageButton_iconWidth="20dp"
    app:imageButton_iconHeight="15dp"

    android:id="@+id/backspaceButton"
    tools:ignore="ContentDescription"
    />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.