如何根据内容

时间:2016-03-18 20:24:13

标签: android android-bitmap

在我的项目中,用户从图库中选择一个图像,然后将其设置为我的自定义视图的背景。我需要将该视图的大小调整为图像的大小。

在当前版本中,我的自定义视图的大小是静态的。但我需要它来调整所选图像的大小。而且,我不知道如何将图像设置为背景而不会被拉伸。

片段的XML文件

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="9">

    <com.example.kreslenie.mapakreslenie.CanvasMap
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:id="@+id/mapping_canvas" />

    ...


</RelativeLayout>

加载图像然后将其设置为背景的片段方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    try {

        if (requestCode == RESULT_LOAD_IMG && resultCode == -1 && null != data) {


            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };


            Cursor cursor = activity.getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);

            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String imgDecodableString = cursor.getString(columnIndex);
            cursor.close();


            Bitmap bitmap = Bitmap.createBitmap(BitmapFactory.decodeFile(imgDecodableString));
            Drawable image = new BitmapDrawable(activity.getResources(), bitmap);
            canvas.setBackground(image);


        } else {
            Toast.makeText(activity, "You haven't picked any Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(activity, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }


}

2 个答案:

答案 0 :(得分:0)

将您的ImageView更改为 -

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:id="@+id/compass_image"
        android:contentDescription="@string/compass_description"
        android:src="@drawable/compass"
        android:visibility="gone"
        android:layout_alignTop="@+id/mapping_canvas"
        android:layout_alignParentEnd="true" />

在设置图像时使用

setImageResource()setImageDrawbale()setImageBitmap()代替setBackground()

答案 1 :(得分:0)

我不确定您使用自定义视图的原因。如果您仅为此图像使用自定义视图,请将其更改为普通的android的Imageview,并在下面添加代码。这是我必须更改imageview以适应屏幕时所做的。

每当我使用bitmapdrawable并在运行时调整它时,它都没有填充android中所有设备的imageview。唯一的方法是使用新的Imageview创建一个新布局并显示它。

public ImageView imageView;

//inside onCreate()
imageView = (ImageView) findViewById(R.id.yourimageviewid);

//Where you want to create the image
Drawable bitmapDrawable = new BitmapDrawable(bitmap);            

After this, add this, 

float factor = CurrentDeviceWindowWidth/(float) bitmap.getWidth();

// we are creating a new layout with width and height approximate ratio to the bitmap width and height, and add the image to it..If you want to adjust the ratio, then you can adjust the ratio formula.//

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(bitmap.getWidth(), (int) bitmap.getHeight() * factor);

imageview.setLayoutParams(layoutParams);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(bitmapDrawable);

试试这个,让我知道。