ऐप की बैकग्राउंड इमेज रिपीट कैसे करें


314

मैंने अपने ऐप में बैकग्राउंड इमेज सेट की है, लेकिन बैकग्राउंड इमेज छोटी है और मैं चाहता हूं कि इसे दोहराया जाए और पूरी स्क्रीन में फिल किया जाए। मुझे क्या करना चाहिए?

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg"
    android:tileMode="repeat">

जवाबों:


429

ठीक है, यहाँ मेरे ऐप में मुझे क्या मिला है। इसमें ListViewस्क्रॉल करते समय काले होने से रोकने के लिए हैक शामिल है ।

drawable / app_background.xml :

<?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/actual_pattern_image"
        android:tileMode="repeat" />

मान / स्टाइल। xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>

  <style name="app_theme" parent="android:Theme">
    <item name="android:windowBackground">@drawable/app_background</item>
    <item name="android:listViewStyle">@style/TransparentListView</item>
    <item name="android:expandableListViewStyle">@style/TransparentExpandableListView</item>
  </style>

  <style name="TransparentListView" parent="@android:style/Widget.ListView">
    <item name="android:cacheColorHint">@android:color/transparent</item>
  </style>

  <style name="TransparentExpandableListView" parent="@android:style/Widget.ExpandableListView">
    <item name="android:cacheColorHint">@android:color/transparent</item>
  </style>

</resources>

AndroidManifest.xml :

//
<application android:theme="@style/app_theme">
//

1
इसके साथ भी प्रयास करें: Android: गुरुत्वाकर्षण = "क्लिप_होर क्षैतिज" --- यह छवि विरूपण से बचता है
फेलिप

2
मैंने यह कोशिश की है, लेकिन सभी स्क्रीन पर केवल एक ही टाइल देखी गई है :(
सेर्गेई मेटलोव

अगर मेरे पास एक ScrollViewपृष्ठभूमि है और उस पर दोहराने के लिए एक पृष्ठभूमि है और मेरे पास एक लंबी लंबी सूची है, तो क्या मुझे आउटऑफ़मैमोरी अपवाद के साथ समस्या नहीं होगी जब ScrollViewबहुत लंबा हो जाता है?
आंद्रेईबोगदान

एक बात का ध्यान रखें कि आपके पास फ़ोल्डर ड्रॉबल-एचडीपीआई, ड्रॉएबल-एमडीपीआई और ड्रॉएबल-एलडीपीआई होना चाहिए, आपको इस बैकरेपिट.एक्सएमएल फाइल और संबंधित छवियों को इनमें से प्रत्येक में जोड़ने की आवश्यकता होगी ताकि यह कार्यक्षमता उच्च हो सके। मध्यम और निम्न डीपीआई (डॉट्स प्रति इंच) स्क्रीन आकार।
कृपाण तबातैबी यज़ीदी

2
@sabertabatabaeeyazdi आपको केवल उन फ़ोल्डरों में छवियों की आवश्यकता है। XML को drawable(withoud -*dpi) फ़ोल्डर में रखा जा सकता है ।
जारोस्लाव

176

इसे करने के लिए ड्रा करने योग्य xml में एक संपत्ति है। एंड्रॉयड: tileMode = "दोहराने"

इस साइट को देखें: http://androidforbeginners.blogspot.com/2010/06/how-to-tile-background-image-in-android.html


38
मैं वास्तव में नहीं जानता कि यह इतना कम मूल्यांकन कैसे है। झुंड वृत्ति? यह टाइल वाली पृष्ठभूमि का मूल कार्यान्वयन है
माइकेल के

5
यह एक आकर्षण की तरह काम करता है। इसके अलावा यह ऐसा करने का सही तरीका लगता है।
जेकासो

3
मैं सहमत हूं कि यह स्वीकृत उत्तर होना चाहिए। यह वास्तव में सरल है और पूरी तरह से काम करता है!
हुआंग

6
+1 केवल एक चीज को ठीक किया जाना चाहिए जो कि लेख में गलत तरीके से उल्लिखित है you'll need to add this backrepeat.xml file and the relevant images to each of these to allow this functionality in high, medium and low dpi:। आपको केवल सभी घनत्व वाली बाल्टियों में संदर्भित ड्रॉबल्स को रखना होगा। संदर्भित XML एक्सट्रैबल को drawableफ़ोल्डर में रखा जा सकता है , यह पर्याप्त है।
कांव-कांव

इसे आप एक समर्थक
मुनीब मिर्ज़ा

69

यहां पृष्ठभूमि की छवि को दोहराते हुए शुद्ध-जावा कार्यान्वयन है:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bg_image);
    BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
    bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    LinearLayout layout = new LinearLayout(this);
    layout.setBackgroundDrawable(bitmapDrawable);
}

इस स्थिति में, हमारी पृष्ठभूमि छवि को res / drawable / bg_image.png में संग्रहीत करना होगा।


6
Android.graphics.Shader
पीटर विल्सी

अगर मेरे पास एक ScrollViewपृष्ठभूमि है और उस पर दोहराने के लिए एक पृष्ठभूमि है और मेरे पास एक लंबी लंबी सूची है, तो क्या मुझे आउटऑफ़मैमोरी अपवाद के साथ समस्या नहीं होगी जब ScrollViewबहुत लंबा हो जाता है?
आंद्रेईबोगदान

अब यह काम क्यों नहीं होना चाहिए? मूल्यह्रास का मतलब है कि इन आदेशों का अब और उपयोग नहीं किया जाना चाहिए क्योंकि वे भविष्य में कुछ समय के लिए सेवानिवृत्त हो सकते हैं। एपीआई 19 में, यह अभी भी @plowman के सुझाव के अनुसार काम करता है। इसके अलावा, बिटमैपड्रेडेबल नहीं है, लेकिन इसके कुछ तरीके ही हैं। मैंने ऊपर दिए गए कोड को संपादित किया है ताकि हमें पदावनत विधियों का उपयोग न करना पड़े।
ओलिवर हॉसलर

16

प्लोमैन के जवाब पर विस्तार करते हुए, यहां बैकग्राउंड इमेज को जावा के साथ बदलने का नॉन-डिप्रेक्टेड वर्जन है।

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bitmap bmp = BitmapFactory.decodeResource(getResources(),
            R.drawable.texture);
    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(),bmp);
    bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT,
            Shader.TileMode.REPEAT);
    setBackground(bitmapDrawable);
}

3
// Prepared By Muhammad Mubashir.
// 26, August, 2011.
// Chnage Back Ground Image of Activity.

package com.ChangeBg_01;

import com.ChangeBg_01.R;

import android.R.color;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class ChangeBg_01Activity extends Activity
{
    TextView tv;
    int[] arr = new int[2];
    int i=0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tv = (TextView)findViewById(R.id.tv);
        arr[0] = R.drawable.icon1;
        arr[1] = R.drawable.icon;

     // Load a background for the current screen from a drawable resource
        //getWindow().setBackgroundDrawableResource(R.drawable.icon1) ;

        final Handler handler=new Handler();
        final Runnable r = new Runnable()
        {
            public void run() 
            {
                //tv.append("Hello World");
                if(i== 2){
                    i=0;            
                }

                getWindow().setBackgroundDrawableResource(arr[i]);
                handler.postDelayed(this, 1000);
                i++;
            }
        };

        handler.postDelayed(r, 1000);
        Thread thread = new Thread()
        {
            @Override
            public void run() {
                try {
                    while(true) 
                    {
                        if(i== 2){
                            //finish();
                            i=0;
                        }
                        sleep(1000);
                        handler.post(r);
                        //i++;
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };


    }
}

/*android:background="#FFFFFF"*/
/*
ImageView imageView = (ImageView) findViewById(R.layout.main);
imageView.setImageResource(R.drawable.icon);*/

// Now get a handle to any View contained 
// within the main layout you are using
/*        View someView = (View)findViewById(R.layout.main);

// Find the root view
View root = someView.getRootView();*/

// Set the color
/*root.setBackgroundColor(color.darker_gray);*/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.