2016-05-30 18 views
1

Ich versuche, eine App zu machen, wo immer die App geöffnet ist, wird es ein anderes Bild im Hintergrund zeigen, aber wenn ich versuchte, die Methode aufzurufen. Ich erhalte error.I unscharfe Bild für api mache niedriger als 16 ist das, was ich gebrauchtFehler beim Aufruf der Methode

public class MainActivity extends AppCompatActivity { 
int roll[]={R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img6}; 
int number; 
private final Paint mPaint = new Paint(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Random num= new Random(); 
number=num.nextInt(6); 
    ImageView img =(ImageView)findViewById(R.id.imageView); 

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),roll[number]); 
    Bitmap blurredBitmap = blur(""+roll[number]); 
    img.setImageBitmap(blurredBitmap); 
} 


public Bitmap blur(final String pathToBitmap) { 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    final Bitmap normalOne = BitmapFactory.decodeFile(pathToBitmap, options); 
    final Bitmap resultBitmap = Bitmap.createBitmap(options.outWidth, options.outHeight, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(resultBitmap); 
    mPaint.setAlpha(180); 
    canvas.drawBitmap(normalOne, 0, 0, mPaint); 
    int blurRadius = 12; 
    for (int row = -blurRadius; row < blurRadius; row += 2) { 
     for (int col = -blurRadius; col < blurRadius; col += 2) { 
      if (col * col + row * row <= blurRadius * blurRadius) { 
       mPaint.setAlpha((blurRadius * blurRadius)/((col * col + row * row) + 1) * 2); 
       canvas.drawBitmap(normalOne, row, col, mPaint); 
      } 
     } 
    } 
    normalOne.recycle(); 
    return resultBitmap; 
} 
} 

, wo ich falsch mache? Ich verwende diese Methode, weil in Google die meisten der Unschärfe-Effekt nicht in api < 16. Ich will nur wissen, was ich falsch im Code tun.

+0

Mögliche Duplikat [Erstellen verschwommen transparenten Hintergrund Effekt] (http://stackoverflow.com/questions/6795483/create-blurry-transparent-background-effect) –

+0

wie bereits erwähnt das Projekt für api ist <= 16 das ist der Hauptgrund – SAVVY

+0

was ist das Problem? gibt es einen Absturz? Ist das resultierende Bild nicht das, was Sie erwartet haben? Bitte erläutern Sie, was das tatsächliche Ergebnis ist. Wenn das resultierende Bild fehlerhaft ist, posten Sie bitte ein Bild. Wenn es einen Absturz gibt, zeigen Sie bitte den Stack-Trace an. –

Antwort

2

Wenn Sie versuchen, diesen Code zu verwenden:

Bitmap blurredBitmap = Unschärfe ("" + Rolle [Nummer]);

Dieser Weg („“ + Rolle [Zahl]) nicht den absoluten Pfad überein, da ziehbar Ressourcen binäre zur Laufzeit hinzugefügt werden, so können nicht durch Pfad zugegriffen werden. Versuchen zu verwenden

BitmapFactory.decodeResource (getResources(), resourceID);

public Bitmap blur(int resourceId) { 
     final Bitmap normalOne = BitmapFactory.decodeResource(getResources(),resourceId); 
     final Bitmap resultBitmap = Bitmap.createBitmap(normalOne.getWidth(), normalOne.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(resultBitmap); 
     mPaint.setAlpha(180); 
     canvas.drawBitmap(normalOne, 0, 0, mPaint); 
     int blurRadius = 12; 
     for (int row = -blurRadius; row < blurRadius; row += 2) { 
      for (int col = -blurRadius; col < blurRadius; col += 2) { 
       if (col * col + row * row <= blurRadius * blurRadius) { 
        mPaint.setAlpha((blurRadius * blurRadius)/((col * col + row * row) + 1) * 2); 
        canvas.drawBitmap(normalOne, row, col, mPaint); 
       } 
      } 
     } 
     normalOne.recycle(); 
     return resultBitmap; 
    } 
Verwandte Themen