앱의 배경 이미지를 반복하는 방법


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스크롤하는 동안 s가 검게 변하는 것을 막기위한 핵을 포함합니다 .

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

values ​​/ 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
android : gravity = "clip_horizontal"--- 이미지 변형을 피하십시오
Felipe

2
나는 이것을 시도했지만 모든 화면에 뻗어있는 단일 타일 만 보았습니다 :(
Sergey Metlov

나는이있는 경우 ScrollView와 배경이에 반복 배치하고 나는 긴 긴 목록을 가지고있는 때, 나는에서 OutOfMemory 예외에 문제가되지 않습니다 ScrollView매우 긴이됩니까?
AndreiBogdan

염두에 두어야 할 것은 drawable-hdpi, drawable-mdpi 및 drawable-ldpi 폴더가 있어야한다는 것입니다.이 backrepeat.xml 파일과 관련 이미지를 각각에 추가해야이 기능을 최대한 활용할 수 있습니다. 중간 및 낮은 dpi (인치당 도트 수) 화면 크기.
saber tabatabaee yazdi

2
@sabertabatabaeeyazdi 해당 폴더의 이미지 만 필요합니다. XML은 drawable(withoud -*dpi) 폴더에 넣을 수 있습니다 .
Jaroslav

176

drawable xml에는 속성이 있습니다. android : tileMode = "반복"

이 사이트를 참조하십시오 : http://androidforbeginners.blogspot.com/2010/06/how-to-tile-background-image-in-android.html


38
나는 이것이 어떻게 그렇게 낮은 등급인지 모르겠다. 무리 본능? 이것은 타일 배경의 기본 구현입니다
Michał K

5
이것은 매력처럼 작동합니다. 또한 이것은 올바른 방법처럼 보입니다.
JCasso

3
나는 이것이 대답으로 받아 들여 져야한다는 것에 동의한다. 정말 간단하고 완벽하게 작동합니다!
huong

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폴더에 넣을 수 있습니다 .
caw

이것은 당신이 프로에 의해 설명 호출 무엇인가
Muneeb 미르자

69

다음은 백그라운드 이미지 반복의 순수 Java 구현입니다.

@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와 배경이에 반복 배치하고 나는 긴 긴 목록을 가지고있는 때, 나는에서 OutOfMemory 예외에 문제가되지 않습니다 ScrollView매우 긴이됩니까?
AndreiBogdan

왜 더 이상 작동하지 않습니까? 감가 상각은 이러한 명령이 나중에 사용되지 않을 수 있으므로 더 이상 사용하지 않아야 함을 의미합니다. API 19에서도 여전히 @plowman이 제안한대로 작동합니다. 또한 BitmapDrawable은 더 이상 사용되지 않지만 해당 메소드 중 일부만 사용되지 않습니다. 위의 코드를 편집 했으므로 더 이상 사용되지 않는 메소드를 사용할 필요가 없습니다.
Oliver Hausler

16

plowman의 답변을 확장하여 Java로 배경 이미지를 변경하는 데 사용되지 않는 버전이 있습니다.

@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);*/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.