Android:动态更改视图背景

时间:2013-08-01 06:35:12

标签: android android-view android-sdcard bitmapfactory

我正在尝试动态更改视图的背景图像。 我有一个扩展View类的paintView类。 我接受用户输入(下面代码中的m_text),它是保存在SD卡中的图像的文件名。 然后,我想将其设置为paintView的背景图像。

我试过但它只给了我一个白色的背景。所以我认为路径可能有问题。所以我注释掉了我使用用户输入的部分,并尝试使用图像的实际路径(我用来保存图像的路径,下面代码中的未注释地址)。它仍然给我一个白色背景。

有人可以帮我找出错误的位置吗?

谢谢!

@SuppressWarnings("deprecation")
private void loadImage(){

    String root = Environment.getExternalStorageDirectory().toString();
    //String address = root + m_text;
    String address = "file://" + root + "/saved_images" + "/Image.jpg";
    File imageFile = new File(address);

    Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
    System.out.println(imageFile.getAbsolutePath());
    Drawable bgImage = new BitmapDrawable(context.getResources(), bitmap);

    paintView.setBackgroundDrawable(bgImage);

}

这是调用此函数的地方。它在onCreate方法中:

loadButton.setOnClickListener(new OnClickListener(){

           @Override
           public void onClick(View arg0){
               AlertDialog.Builder builder = new AlertDialog.Builder(context);

               final EditText input = new EditText(context);
               input.setInputType(InputType.TYPE_CLASS_TEXT);
               builder.setView(input);

               builder.setPositiveButton("load", new DialogInterface.OnClickListener(){
                   @Override
                   public void onClick(DialogInterface dialog, int which){
                       m_text = input.getText().toString();
                       loadImage();
                   }
               });

               builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
                   @Override
                   public void onClick(DialogInterface dialog, int which){
                       dialog.cancel();
                   }
               });


               builder.show();

           }       
        });

在清单中:

<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"/>

1 个答案:

答案 0 :(得分:0)

你为什么要用这个?

String address = "file://" + root + "/saved_images" + "/Image.jpg";

我认为你无法解码文件。你检查过你的位图了吗?我想你只需要使用

String address = root + "/saved_images" + "/Image.jpg";

试一试。