Bir uygulamanın arka plan resmini tekrarlama


314

Uygulamamda bir arka plan resmi ayarladım, ancak arka plan resmi küçük ve tekrarlanmasını ve tüm ekranı doldurmasını istiyorum. Ne yapmalıyım?

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

Yanıtlar:


429

Tamam, işte uygulamamda ne var. Önlemek için bir kesmek içerirListViewKaydırma sırasında s'nin siyahlaşmasını .

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

değerleri / styles.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
Bunu da deneyin: android: gravity = "clip_horizontal" --- görüntü deformasyonunu önler
Felipe

2
Bunu denedim ama tüm ekrana uzanan tek bir kiremit gördüm :(
Sergey Metlov

Ben ScrollViewve tekrarlamak için bir arka plan varsa ve uzun uzun bir listem varsa, ScrollViewçok uzun olduğunda OutOfMemory istisna ile sorunları olmaz mı?
AndreiBogdan

Akılda tutulması gereken bir şey, çekilebilir-hdpi, çekilebilir-mdpi ve çekilebilir-ldpi klasörlerinizin olması gerektiğidir, bu işlevselliğe yüksek düzeyde izin vermek için bu backrepeat.xml dosyasını ve ilgili görüntüleri eklemeniz gerekir. orta ve düşük dpi (inç başına nokta sayısı) ekran boyutları.
saber tabatabaee yazdi

2
@sabertabatabaeeyazdi Bu klasörlerde yalnızca resimlere ihtiyacınız var. XML drawable(withoud -*dpi) klasörüne yerleştirilebilir .
Jaroslav

176

Çekilebilir xml'de bunu yapmak için bir özellik var. android: TileMOde = "tekrar"

Bu siteye bakın: http://androidforbeginners.blogspot.com/2010/06/how-to-tile-background-image-in-android.html


38
Gerçekten bu kadar düşük puan nasıl bilmiyorum. Sürü içgüdüsü? Bu kiremitli arka plan yerel uygulaması
Michał K

5
Bu bir cazibe gibi çalışıyor. Ayrıca bu, bunu yapmanın doğru yolu gibi görünüyor.
JCasso

3
Bunun kabul edilen cevap olması gerektiğine katılıyorum. Gerçekten basit ve mükemmel çalışıyor!
huong

6
1 Tek bir şey makalesinde yanlış söz olduğunu düzeltilmelidir: 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. Sadece başvurulan çekilebilirleri tüm yoğunluk kovalarına yerleştirmeniz yeterlidir. Çekilebilir referans XML, drawableklasöre yerleştirilebilir , bu yeterlidir.
caw

Bu bir profesyonel tarafından açıklandığı şey
Muneeb Mirza

69

İşte arka plan görüntüsü tekrarının saf java uygulaması:

@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);
}

Bu durumda, arka plan resmimizin res / drawable / bg_image.png dosyasında saklanması gerekir.


6
android.graphics.Shader
Peter Willsey

Ben ScrollViewve tekrarlamak için bir arka plan varsa ve uzun uzun bir listem varsa, ScrollViewçok uzun olduğunda OutOfMemory istisna ile sorunları olmaz mı?
AndreiBogdan

Neden artık çalışmıyor? Amortisman, bu komutların artık kullanılmaması gerektiği anlamına gelir, çünkü ileride bir süre sonra emekli olabilirler. API 19'da, bu hala @plowman'ın önerdiği gibi çalışır. Ayrıca, BitmapDrawable kullanımdan kaldırıldı, ancak yöntemlerinden sadece bazıları. Kullanım dışı yöntemleri kullanmak zorunda kalmamak için yukarıdaki kodu düzenledim.
Oliver Hausler

16

Ploughman'ın cevabına göre, arka plan resmini java ile değiştirmenin kullanımdan kaldırılmış versiyonu.

@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);*/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.