自定义 Drawable 无法在 ImageView 中正确显示

Custom Drawable does not properly display in ImageView

我正在开发一个 Android 应用程序,它需要显示一些动态生成的图像。我试图通过创建一个 activity 来实现它,它 (1) 创建一个自定义的 Drawable 对象,并且 (2) 显示缩放以适合 ImageView 并居中的 Drawable。我的问题是,当我 运行 我的测试设备上的应用程序时,图像显示为水平线,而不是应有的正确矩形图像。我不知道发生了什么。我希望我只是以某种方式错误指定了布局。

这是 Java 代码:

public abstract class InstructionsActivity extends AppCompatActivity implements Constants {

    public static final int DIAGRAM_SCALE = 50;

    Instructions instructions;
    TextView     instructionsView;
    ImageView    diagramView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_instructions);
        Intent intent = getIntent();
        int number = intent.getIntExtra(ShapeActivity.NUMBER,1);
        double[] measurements = intent.getDoubleArrayExtra(ShapeActivity.MEASUREMENTS);
        instructions = instructions(number,measurements);
        instructionsView = findViewById(R.id.instructionsTextView);
        diagramView = findViewById(R.id.diagramView);
        instructionsView.setText(instructions.getText());
        diagramView.setImageDrawable(instructions.getDiagram());

    }

    public abstract Instructions instructions(int number, double[] measurements);

}

public class RectangleInstructionsActivity extends InstructionsActivity {

    @Override
    public Instructions instructions(int number, double[] measurements) {

        Instructions output = new Instructions();
        // Various calculations omitted for brevity
        StringBuilder sb = new StringBuilder();
        // Text generation omitted for brevity
        output.setText(sb.toString());

        // Diagram-producing block

        final float diagramWidth = (float)(BOLT*DIAGRAM_SCALE);
        final float diagramHeight = (float)(f[orientation]*DIAGRAM_SCALE);
        Drawable diagram = new Drawable() {

            @Override
            public void draw(Canvas canvas) {

                canvas.drawRect(0,0,diagramWidth,diagramHeight,output.getBackground()); // Test rectangle

            }

            // Other Drawable methods omitted for brevity

        };
        diagram.setBounds(0,0,(int)Math.ceil(diagramWidth),(int)Math.ceil(diagramHeight));
        output.setDiagram(diagram);

        // Output

        return output;

    }

}

这里是 ImageView 的 XML 布局,它设置在 ConstraintLayout 中:

<ImageView
     android:id="@+id/diagramView"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_marginStart="12dp"
     android:layout_marginLeft="12dp"
     android:layout_marginTop="24dp"
     android:layout_marginEnd="12dp"
     android:layout_marginRight="12dp"
     android:contentDescription="@string/diagram_description"
     android:scaleType="fitCenter"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toBottomOf="@id/instructionsTextView"
     app:srcCompat="@android:drawable/screen_background_light" />

非常感谢您的帮助和建议。

经过反复试验,似乎解决方案——或者无论如何,一种解决方案——是为 activity 的 xml 中的 ImageView 指定 android:adjustViewBounds="true"文件。