Custom Drawable不能在ImageView中正确显示



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

下面是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" />

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

经过多次试验和错误,似乎解决方案-或一个解决方案,无论如何-是在活动的xml文件中为ImageView指定android:adjustViewBounds="true"

最新更新