2013-11-17 6 views
1

У меня есть ImageView, что это набор для моего значка, как показано здесь:Разрешить пользователю изменить иконку

<ImageView 
    android:id="@+id/bwidgetOpen" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_launcher" 
    android:contentDescription="@string/desc"/> 

И я пытаюсь, чтобы позволить пользователю изменить его. Я разрешаю им делать это в классе, который я сделал с именем Personalize, и дать им возможность выбрать изображение из своей галереи, а затем показать это изображение в предварительном просмотре (другое изображение) до того, как они нажмут кнопку «Установить изображение», а затем картина, которую они выбрали отсылается к деятельности, чтобы установить значок, как это:

private void setIconImageInWidget() { 
// TODO Auto-generated method stub 
Log.d("Personalize", "setIconImageInWidget() called"); 
Intent i = getIntent(); 
//Convert bitmap to byte array to send back to activity 
// See: http://stackoverflow.com/questions/11010386/send-bitmap-using-intent-android 
scaleDownBitmapForIcon(b2, 500, this.getBaseContext()); 
Log.d("Personalize", "Scale Bitmap Chosen For Icon"); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
b2.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[]byteArray = stream.toByteArray(); 

i.putExtra("myIconBitmap", byteArray); 
setResult(RESULT_ICON, i); 
finish(); 
} 

Тогда он установлен здесь:

  else if(requestCode == RESULT_ICON){ 
     byte[] byteArray = data.getByteArrayExtra("myIconBitmap"); 
     Bitmap myIcon = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
     setBackgroundImageForIcon(myIcon); 
     Log.d("Drag_and_Drop_App", "Icon is set"); 
    } 

((класс setBackgroundImageForIcon (ОБНОВЛЕНО):

 private void setBackgroundImageForIcon(Bitmap bitmap) { 
    ImageView ivICON = (ImageView) findViewById(R.id.bwidgetOpen); 

    Drawable dq = new BitmapDrawable(getResources(), bitmap); 

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
    ivICON.setImageDrawable(dq); 
    } else { 
    ivICON.setImageDrawable(dq); 
    Log.d("Drag_and_Drop_App", "Icon is set"); 
    } 
    } 

))

Это не вызывает ошибок и возвращает правильный код запроса, но, похоже, он вообще не меняет значок. Я также сделал так, что, когда пользователь выходит из программы, он сохраняет путь изображения, а затем перезагружает его по методу onResume().

Таким образом, моя проблема заключается в том, что значок не установлен на выбранный пользователем образ. Почему это?

Если я собираюсь сделать это неправильно или вам нужно реализовать еще какой-либо код, пожалуйста, дайте мне знать.

ДОБАВЛЕНО:

я, вероятно, на самом деле следовало бы добавить это, когда я писал этот вопрос, но ... Просто так известно, это настроен как виджет, так вот мой AppWidgetProvider, а также:

package com.example.awesomefilebuilderwidget; 
IMPORTS 
public class AFBWidget extends AppWidgetProvider{ 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    // TODO Auto-generated method stub 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    Random r = new Random(); 
    int randomInt = r.nextInt(1000000000); 
    String rand = String.valueOf(randomInt); 

    final int N = appWidgetIds.length; 

    for (int i = 0; i < N; i++){ 
     int awID = appWidgetIds[i]; 
     RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget); 
     v.setTextViewText(R.id.tvwidgetUpdate, rand); 
      Intent configIntent = new Intent(context, Drag_and_Drop_App.class); 

      PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

      v.setOnClickPendingIntent(R.id.bwidgetOpen, configPendingIntent); 

     appWidgetManager.updateAppWidget(awID, v); 
    } 

} 

@Override 
public void onDeleted(Context context, int[] appWidgetIds) { 
    // TODO Auto-generated method stub 
    super.onDeleted(context, appWidgetIds); 
    Toast.makeText(context, "Thanks for checking us out!", Toast.LENGTH_SHORT).show(); 
} 
} 
+0

Вы изменения фона в LinearLayout или ImageView? Вы устанавливаете фон linearlayout в методе setBackgroundImageForIcon() – chinglun

+0

А, спасибо, я забыл изменить это. Да, я меняю изображение, а не фон. Я изменил свою кодировку на вышеупомянутую (проверьте обновленный вопрос), но она по-прежнему не меняет значок. – user2909006

ответ

0

Я уже отправил ответ. Он берет фотографию из намерения камеры (вы можете предоставить изображение галереи), а затем показывает ее перед сохранением, а затем у вас есть два текстовых изображения с именем DONE и CANCEL, и в их слушателях вы можете делать все, что захотите.

Android camera to take multiple photos