1

独自の描画可能オブジェクトを ImageView に追加しようとしました。ドローアブルが ImageView に適合するようにします。しかし、解像度が小さすぎる場合、ドローアブルは ImageView よりも大きくなります。

ここに私のImagView:

<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);

助けてくれてありがとう

4

2 に答える 2

1

このように静的な幅と高さを使用しないでくださいcanvas.drawLine(0, 0, 700, 0, paint);。代わりに、次のように getHeight() と getWidth() の分数を使用します。

canvas.drawLine(0, 0, getHeight()/2, 0, paint);

とか、ぐらい。その後、スケーリングの問題は自然に解決します

于 2013-10-18T13:35:40.373 に答える
1

1) ImageView に次の属性があることを確認します。

android:adjustViewBounds="true"
android:scaleType="centerInside"

これにより、画像が中央に配置され、画像ビュー内に収まります。

2) 明らかな理由により、そのようなドローアブルは属性の対象になりません。属性が画像に影響を与えるには、ビットマップまたは imageResource である必要があるようです。つまり、ドローアブルをビットマップに変換します。ここに私が取った作成済みのコードがあります: 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));
于 2013-10-18T09:03:24.020 に答える