【问题标题】:How to scale an own drawable in ImageView如何在 ImageView 中缩放自己的可绘制对象
【发布时间】:2013-10-19 01:39:04
【问题描述】:

我尝试将自己的可绘制对象添加到 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>

这是我的drawable:

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

感谢您的帮助

【问题讨论】:

    标签: android scale android-imageview android-drawable


    【解决方案1】:

    您不应该像canvas.drawLine(0, 0, 700, 0, paint); 这样使用静态宽度和高度。 请改用 getHeight() 和 getWidth() 的分数,例如:

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

    左右。然后缩放问题自行解决

    【讨论】:

    • 我希望 ImageView 可以为我处理。当我在这里发布时,我的可绘制对象要大得多。但看来我必须做这项工作。
    【解决方案2】:

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

    【讨论】:

    • 这不会改变任何东西。同样的问题,我的 drawable 比 ImageView 大并且显示不完整。
    • 我遇到了类似的问题并解决了。我现在在打电话,准备睡觉了。如果明天早上还没有解决,我会发布我的代码。我非常肯定它与 XML 文件有关,而不是与您的 java 文件有关。我现在没有电脑,否则我会发布 XML 文件的属性。
    • 我已经从我的 ImageView 添加了 parentsview。愿它有所帮助。
    • 我已经更新了答案,看看吧。如果它解决了您的问题,请选择我的解决方案附近的复选标记以表明它是答案。希望它成功了! :)
    • 那我很抱歉。不知道如何解决它。尽管总是有编程的解决方案。当您的级别足够高以吸引更多答案时,请尝试设置赏金。我提高了您的问题,以便您获得积分并让其他人注意到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多