无法通过位图填充imageview,奇怪的行为

时间:2014-03-11 14:41:00

标签: android android-layout bitmap imageview

简单布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc"
tools:context="com.testzoom.app.FullscreenActivity">

<TextView android:id="@+id/fullscreen_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    android:textColor="#33b5e5"
    android:textStyle="bold"
    android:textSize="50sp"
    android:gravity="center"
    android:text="@string/dummy_content" />

    <Button android:id="@+id/dummy_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/dummy_button"
            android:layout_gravity="bottom"
            />

    <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY"
            android:id="@+id/dummy_image"
            />

</FrameLayout>

目标 - 按下底部的按钮,使用半尺寸的屏幕截图位图设置imageview(与屏幕大小相同)。结果 - 奇怪的渲染,为什么fitXY无法正常工作?

点击处理程序:

findViewById(R.id.dummy_button).setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            View view = getWindow().getDecorView();

            Bitmap bmp = Bitmap.createBitmap(view.getWidth()/2, view.getHeight()/2, Bitmap.Config.ARGB_8888);

            Canvas c = new Canvas(bmp);
            c.scale(0.5f,0.5f, bmp.getWidth(), bmp.getHeight());
            view.draw(c);

            ((ImageView)findViewById(R.id.dummy_image)).setImageBitmap(bmp);
        }
    });

屏幕截图的结果:

app launch After pressing


请注意,此任务是合成的,所以不要问为什么我这样做,这只是问题的证明。

2 个答案:

答案 0 :(得分:1)

问题在于缩放画布的调用。您提供的枢轴点是bmp.getWidth()和bmp.getHeight(),它们基本上位于屏幕中间。

findViewById(R.id.dummy_button).setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            View view = getWindow().getDecorView();

            Bitmap bmp = Bitmap.createBitmap(view.getWidth()/2, view.getHeight()/2, Bitmap.Config.ARGB_8888);

            Canvas c = new Canvas(bmp);
            c.scale(0.5f,0.5f);//no pivot points 
            view.draw(c);

            ((ImageView)findViewById(R.id.dummy_image)).setImageBitmap(bmp);
        }
    });

答案 1 :(得分:0)

我认为渲染不像新ImageView的放置那么多。 FrameLayout中包含所有三个项目,它们无法确定视图的顺序或位置。放置新创建的ImageView的代码在哪里?