2013-10-18 69 views
1

我試圖將自己的可繪製對象添加到ImageView。我希望drawable適合ImageView。但是如果我的分辨率較小,繪圖比ImageView更大。如何在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); 

感謝所有幫助

回答

1

你不應該使用靜態寬度和高度像這樣canvas.drawLine(0, 0, 700, 0, paint);。 的getHeight()和的getWidth(的使用分數)來代替,如:

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

左右。然後縮放問題自行解決

+0

我希望ImageView能夠爲我處理它,我的drawable比我在這裏發佈的要大得多,但看起來我必須完成這項工作。 – BHuelse

1

1)請確保您的ImageView有這些屬性:

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

這應該使圖像居中,並將它放在imageview中。

2)由於一些明顯的原因drawables不會受屬性。看起來它必須是用於影響圖像的屬性的位圖或圖像資源。換句話說,將您的繪圖轉換爲位圖。下面是我從一個預先寫好的代碼: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)); 
+0

這不會改變任何東西。同樣的問題,我的drawable比ImageView更大,並沒有顯示完整。 – BHuelse

+0

我有類似的問題,並解決它。我現在正在打電話上牀睡覺。如果明天早上沒有解決,我會發布我的代碼。我非常肯定它與XML文件相關,而不是你的Java文件。我現在沒有我的電腦,否則我會發布XML文件的屬性。 – ChallengeAccepted

+0

我已經從我的ImageView中添加了父視圖。可以幫助。 – BHuelse