【问题标题】:Allow user to change the icon允许用户更改图标
【发布时间】:2013-11-30 09:51:06
【问题描述】:

我有一个为我的图标设置的 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 的课程中​​执行此操作,并让他们能够从他们的画廊中选择一个图像,然后在他们点击一个名为“Set Image”的按钮之前在预览(另一个 imageView)中显示该图像,然后他们选择的图片被发送到活动以设置图标,如下所示:

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

【问题讨论】:

  • 您是在更改线性布局还是图像视图的背景?您正在方法 setBackgroundImageForIcon() 中设置线性布局的背景
  • 啊,谢谢,我忘了改。是的,我正在更改 imageView,而不是背景。我将我的编码更改为上述(检查更新的问题),但它似乎仍然没有改变任何图标。

标签: android android-imageview android-icons


【解决方案1】:

我之前已经发布了一个答案。它从相机意图中获取照片(您可以提供图库图片),然后在保存之前显示它,然后您有两个名为 DONE 和 CANCEL 的文本视图,在它们的侦听器中,您可以做任何您想做的事情。

Android camera to take multiple photos

【讨论】:

    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 2019-01-18
    • 2017-06-03
    • 2016-12-10
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多