1

Okey Ich habe ein Problem mit der Einstellung eines Bildes für den Hintergrund. Zuerst setze ich einfach den Hintergrund aus dem Feld "Eigenschaften". Ich kopiere die .jpg Datei in meinen zeichnenden Ordner und klicke einfach auf den Hintergrund Properity von Properties Box dann wähle die Datei aus dem Ressourcen-Ordner. Das war okey und es funktionierte, aber dann wollte ich den Hintergrund unscharf machen und ich fand eine Klasse, die dafür geschrieben wurde, BlurBuilder genannt und ich legte diese Klasse zu meinem Projekt. Alles ist zu diesem Punkt okey, fügte ich die Klasse, aber wenn ich versuchte, die funciton von dieser Klasse anzuwenden, wie in einem Beispiel, wie gezeigt, dass:Einstellung Hintergrund mit setBackgroungDrawable Funktion in Android

Bitmap blurredBitmap = BlurBuilder.blur(MainActivity.this,myBackgroundFile); 
    view.setBackgroundDrawable(new BitmapDrawable(getResources(), blurredBitmap)); 

Editor sagt Ansicht ‚‚‘kann Symbol nicht lösen‘. Ich versuchte, die zweite Zeile zu ändern;

View.setBackgroundDrawable(new BitmapDrawable(getResources(), blurredBitmap)); 

Aber diesmal Android Studio sagt 'Non-statische Methode' setBackgroudDrawable (android.graphic.drawables.Drawable) kann nicht von einem statischen Kontext

Hier ist die BlurBuilder Klasse I verwendet referenziert werden:

public class BlurBuilder { 
private static final float BITMAP_SCALE = 0.4f; 
private static final float BLUR_RADIUS = 7.5f; 

public static Bitmap blur(Context context, Bitmap image) { 
    int width = Math.round(image.getWidth() * BITMAP_SCALE); 
    int height = Math.round(image.getHeight() * BITMAP_SCALE); 

    Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false); 
    Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap); 

    RenderScript rs = RenderScript.create(context); 
    ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); 
    Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap); 
    Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); 
    theIntrinsic.setRadius(BLUR_RADIUS); 
    theIntrinsic.setInput(tmpIn); 
    theIntrinsic.forEach(tmpOut); 
    tmpOut.copyTo(outputBitmap); 

    return outputBitmap; 
}} 

Vielen Dank im Voraus.

EDIT: Ich möchte den Hintergrund meiner Aktivität unscharf machen.

+0

Ich nehme an, Ansicht ist Ihr ImageView-Variablenname? – sumandas

+0

Nein, ist es nicht. Ich habe gerade mit der Programmierung von Android begonnen. Also verlasse ich einfach da, wie ich aus dem Beispiel kopiert habe. Ich weiß, ich sollte es ändern, aber ich weiß nicht, was ich genau machen soll. Wie sollte es sich ändern? Und ich versuche, das Bild für das gesamte Layout festzulegen. –

Antwort

1

Sie rufen einen nicht-statischen Funktion, dh setDrawableBackground aus einem nicht-statischen Kontext, was bedeutet, zu sagen, dass Sie eine Instanz einer Ansicht zum Beispiel erstellen müssen:

ImageView view = (ImageView) findViewById(R.id.imageview1);  
Bitmap blurredBitmap = BlurBuilder.blur(MainActivity.this,myBackgroundFile); 
view.setBackgroundDrawable(new BitmapDrawable(getResources(), blurredBitmap)); 

Sobald jetzt getan Sie können alle Anrufe entgegen Funktion, die view unterstützt.

+0

Danke für die Erklärung. Aber ich versuche, das Bild als Hintergrund für mein gesamtes Layout festzulegen, nicht für ein ImageView. Was soll ich machen. –

+0

füllt das Layout den gesamten Bildschirm? –

+0

Sie benötigen keine View pro Say, Sie können dasselbe setBackgroundDrawable auf einem Layout aufrufen! –

1

Verstanden,

Fügen Sie den folgenden in XML (main_activity.xml oder was auch immer Ihre Datei):

<ImageView 
     android:id="@+id/whole_background" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/android" /> 

Fügen Sie den folgenden in dort [in Main Activity]: Dies wird Maßstab zwingen, die Bild, um die Bildschirmgröße anzuzeigen und das gesamte Display zum Anzeigen des Bildes zu verwenden.

/* where you set the activity */ 
    setContentView(R.layout.your_main_activity); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 


    /* adapt the image to the size of the display */ 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    Bitmap blurredBitmap = BlurBuilder.blur(MainActivity.this,myBackgroundFile); 
    Bitmap bmp = Bitmap.createScaledBitmap(blurredBitmap,size.x,size.y,true); 

    /* fill the background ImageView with the resized image */ 
    ImageView iv_background = (ImageView) findViewById(R.id.whole_background); 
    iv_background.setImageBitmap(bmp); 
+0

Danke, ich werde das versuchen, aber würde nicht, dass ImageView nur alle anderen Elemente auf meinem Layout verschwinden. –

+0

Nicht exakt. :) Wenn Sie AppCompactActivity verwenden und FloatingActionButton verwenden, wird dies nicht der Fall sein. Da ich mir Ihres Anwendungsfalls nicht sicher bin, können Sie einfach ein unscharfes Bild erstellen und das Bild im Layouthintergrund einstellen, so dass die Restansicht gleich bleibt. – sumandas

Verwandte Themen