簡體   English   中英

圖像沒有裁剪

[英]Image not cropping

我正在將一個background圖像設置為LinearLayout如下所示:

1.back_xml:

<?xml version="1.0" encoding="UTF-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
       <item android:drawable="@drawable/back" >
        </item>
    <item>
        <shape>
            <solid/>
            <stroke android:width="1dip" android:color="#225786" />
            <corners android:radius="10dip"/>
            <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
        </shape>
    </item> 

2. tile.xml

    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/pie_chart_background"
        android:tileMode="repeat">
    </bitmap>

現在我將back.xml設置為LinearLayoutbackground它工作正常。

我需要有一個帶圓角image以及它的邊框 。但我只有圓角的邊框而不是圖像我的代碼中有什么問題我錯過了什么?

這是我的圖像的樣子:

在此輸入圖像描述

在你的問題花了幾個小時后,我終於實現了,希望現在它會給你你想要的相同結果,請通過下面的代碼告訴我它是否有效?

將適當的參數傳遞給下面的函數,以獲得您想要的顏色邊框的圓角。

public static Bitmap getRoundedCornerImage(Bitmap bitmap, int cornerDips, int borderDips, Context context) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips,
                context.getResources().getDisplayMetrics());
        final int cornerSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) cornerDips,
                context.getResources().getDisplayMetrics());
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);


        paint.setAntiAlias(true);
        paint.setColor(0xFFFFFFFF);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawARGB(0, 0, 0, 0);
        canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);


        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);


        paint.setColor((Color.RED)); // you can change color of your border here, to other color
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth((float) borderSizePx);
        canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);

        return output;
    }

main.xml中

<RelativeLayout 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"
    android:gravity="center"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"

      />

</RelativeLayout>

在OnCreate

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView rl=(ImageView)findViewById(R.id.image);


    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testing); // your desire drawable image.
    rl.setImageBitmap(getRoundedCornerImage(bitmap, 10, 10, this));

    }

原始圖像

在此輸入圖像描述

產量

在此輸入圖像描述

以下鏈接幫助我實現我的目標:

在Android中使用圓角的位圖邊框

使用圓角創建ImageView

如何使ImageView具有圓角

如何設置paint.setColor(int color)

嘗試你的back.xml像這樣的東西,而不是給一個矩形背景圖像。

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
   <item android:drawable="#ff00ff >
    </item>
 <item>
    <shape android:shape="rectangle" >
        <solid/>
        <stroke android:width="1dip" android:color="#225786" />
        <corners android:radius="10dip"/>
        <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
    </shape>
  </item> 

Raj發布的另一種替代方法是在角落使用透明度的背景圖像。

最簡單的解決方案是使用9補丁,這是大多數背景圖像的Android原生解決方案: http//developer.android.com/guide/topics/graphics/2d- graphics.html#nine-patch ,其風格類似於繪制某些網站背景的方式。

Android也有它自己的9-patch創建者與sdk捆綁在一起: http//developer.android.com/tools/help/draw9patch.html ,因此編輯自己的png文件很簡單,然后應用9補丁布局。 9補丁的優勢在於它們還可以為您調整UI的大小,這意味着您在不同的屏幕上使用應用程序時不會遇到太多問題

解決方案1

  1. 為邊框創建9補丁圖像。 圖像的中間應該是透明的。

  2. 使用RelativeLayout作為父級,並將圖像LinearLayout放在底部。 將邊框9-patch設置為另一個線性布局的背景,並將其放置在圖像LinearLayout的頂部。 然后它將覆蓋角落,您將獲得預期的結果。

解決方案2

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
    bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);

final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = 12;

paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);

return output;

}

將您的形狀與帶圓角的圖像結合使用。

您可以使用AndroidQuery加載帶圓角的圖像。 請參閱http://code.google.com/p/android-query/wiki/ImageLoading#Rounded_Corner

String url ="http://www.vikispot.com/z/images/vikispot/android-w.png";
ImageOptions options = new ImageOptions(); 
options.round = 15;
aq.id(R.id.image).image(url, options);

我想你應該這樣做。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
<item>
    <shape>
        <solid android:color="@color/back" />
        <stroke android:width="1dip" android:color="#225786" />
        <corners android:radius="10dip"/>
        <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
    </shape>
</item> 

如果背景不是顏色但是它是位圖,你應該按照這個美麗的指南http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM