我试图将自己的可绘制对象添加到ImageView。我希望drawable适合ImageView。但如果我的分辨率很小,则drawable比ImageView大。
这是我的ImagaView:
<ScrollView 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"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
...
<ImageView
android:layout_width="match_parent"
android:layout_height="250dip"
android:id="@+id/tvWeekStats"
android:layout_below="@+id/llTimer"
android:layout_margin="5dip"
android:scaleType="fitXY"
android:adjustViewBounds="true"
/>
</RelativeLayout>
</ScrollView>
这是我的绘画:
public class WeekdayDrawable extends Drawable {
private Paint paint;
public WeekdayDrawable() {
this(new StatsWeekday());
}
public WeekdayDrawable(StatsWeekday ownTeam) {
paint = new Paint();
paint.setStyle(Style.FILL);
}
@Override
public void draw(Canvas canvas) {
try {
canvas.save();
paint.setColor(Color.WHITE);
canvas.drawLine(0, 0, 700, 0, paint);
canvas.drawLine(0, 10, 600, 10, paint);
canvas.drawLine(0, 20, 500, 20, paint);
canvas.drawLine(0, 30, 400, 30, paint);
canvas.drawLine(0, 40, 300, 40, paint);
canvas.drawRect(33, 60, 77, 77, paint );
paint.setColor(Color.YELLOW);
canvas.drawRect(33, 33, 77, 60, paint );
paint.setColor(Color.WHITE);
paint.setTextSize(20);
canvas.drawText("Some Text", 10, 25, paint);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void setAlpha(int alpha) {
// Has no effect
}
@Override
public void setColorFilter(ColorFilter cf) {
// Has no effect
}
@Override
public int getOpacity() {
// Not Implemented
return 0;
}
}
Drawable weekStats;
weekStats = new WeekdayDrawable(weekDayData);
tvWeekStats.setImageDrawable(weekStats);
感谢您的帮助
答案 0 :(得分:1)
1)确保您的ImageView具有以下属性:
android:adjustViewBounds="true"
android:scaleType="centerInside"
这应该使图像居中并使其适合您的图像视图。
2)由于某些明显的原因,像这样的drawable不受属性的约束。它似乎必须是位图或imageResource才能影响图像的属性。换句话说,将您的drawable转换为位图。以下是我编写的预编写代码:https://stackoverflow.com/a/10600736/1371041
public static Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
3)使用该方法将其转换为位图并使用以下方法进行设置:
myImageView.setImageBitmap(drawableToBitmap(weekStats));
答案 1 :(得分:1)
您不应该使用静态宽度和高度,例如canvas.drawLine(0, 0, 700, 0, paint);
。
使用getHeight()和getWidth()的分数代替,如:
canvas.drawLine(0, 0, getHeight()/2, 0, paint);
左右。然后缩放问题解决了自己