2015-05-11 6 views
0

enter image description here Я пытаюсь создать круглую форму вытяжки, чтобы поместить в качестве наложения для профильных изображений (круговых изображений) я написал ниже код для круговой вытяжки накладки,Как создать крутящий круг с требованиями ниже?

<?xml version="1.0" encoding="utf-8"?> 

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
     <shape> 
      <solid android:color="@color/light_blue_bg" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="oval"> 
      <stroke 
       android:width="2dp" 
       android:color="@android:color/white" /> 
      <solid android:color="@android:color/transparent" /> 
     </shape> 
    </item> 
</layer-list> 

Направить выход в поле ниже изображений на экране, enter image description here

Известных проблемы: Я создаю прямоугольник @ цвета/light_blue_color и имеет внутреннюю овальную форму с цветом хода и внутренним твердым прозрачным цветом, но из-за внешний прямоугольник цвета прозрачности внутреннего круга не показывать картину. Если я удалю внешний прямоугольник, то реальное квадратное изображение выйдет из кругового наложения.

Есть ли способ дать цвет только внешней круговой части?

Любая помощь буду весьма признателен

+0

'' ... не показывать изображение. "' изображение? какая картина? – pskink

+0

есть изображение за этим наложением .... Я пытаюсь показать, что pic внутри белого круга также пытается скрыть область изображения, которая выходит из наложения белого круга, чтобы быть скрытой по умолчанию по цвету bg. –

+0

изображение? вы имеете в виду ImageView? – pskink

ответ

1

@Sreedhu Мадху .... вы должны настроить ImageView и работать на растровых и холст для достижения так ..

хотя я предлагаю вам использовать один из библиотеки, размещенной Henning Dodenhof на GitHub и Android-арсенал ... CircleImageView

с другой стороны, вы посмотрите, как это done..using этот класс может ..

Custom Class for Circular ImageView

имп метода была установка() и OnDraw()

0

Я не думаю, что это возможно, делая это только в XML. Но вы можете замаскировать его потом в коде. Например, см. this tutorial.

0

Для закругленного (обведено ImageView) добавить этот класс к источнику

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Rect; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class RoundedImageView extends ImageView { 

     public RoundedImageView(Context ctx, AttributeSet attrs) { 
       super(ctx, attrs); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 

       Drawable drawable = getDrawable(); 

       if (drawable == null) { 
        return; 
       } 

       if (getWidth() == 0 || getHeight() == 0) { 
        return; 
       } 
       Bitmap b = ((BitmapDrawable) drawable).getBitmap(); 
       Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

       int w = getWidth(), h = getHeight(); 

       Bitmap roundBitmap = getRoundedCroppedBitmap(bitmap, w); 
       canvas.drawBitmap(roundBitmap, 0, 0, null); 

     } 

     public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) { 
       Bitmap finalBitmap; 
       if (bitmap.getWidth() != radius || bitmap.getHeight() != radius) 
        finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, 
            false); 
       else 
        finalBitmap = bitmap; 
       Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(), 
          finalBitmap.getHeight(), Config.ARGB_8888); 
       Canvas canvas = new Canvas(output); 

       final Paint paint = new Paint(); 
       final Rect rect = new Rect(0, 0, finalBitmap.getWidth(), 
          finalBitmap.getHeight()); 

       paint.setAntiAlias(true); 
       paint.setFilterBitmap(true); 
       paint.setDither(true); 
       canvas.drawARGB(0, 0, 0, 0); 
       paint.setColor(Color.parseColor("#BAB399")); 
       canvas.drawCircle(finalBitmap.getWidth()/2 + 0.7f, 
          finalBitmap.getHeight()/2 + 0.7f, 
          finalBitmap.getWidth()/2 + 0.1f, paint); 
       paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
       canvas.drawBitmap(finalBitmap, rect, rect, paint); 

       return output; 
     } 

} 

, а затем измените ImageView на ваше имя пакета и имя класса (RoundedImageView) в вашем файле макета, таком как

<com.mypackege.RoundedImageView 
     android:id="@+id/imageView_round" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_marginTop="15dp" 
     android:src="@drawable/my_image" /> 

Надеюсь, что это сработает.

0

Попробуйте что-то вроде этого, это сработало для меня!

в вашем XML месте этот обычай RoundImage:

<com.example.hkh.learningandroid.RoundedImageView 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:src="@drawable/person" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/MyImageView" /> 

и создать новый класс и назовите его RoundImageView:

public class RoundedImageView extends ImageView { 

public RoundedImageView(Context ctx, AttributeSet attrs) { 
    super(ctx, attrs); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    Drawable drawable = getDrawable(); 

    if (drawable == null) { 
     return; 
    } 

    if (getWidth() == 0 || getHeight() == 0) { 
     return; 
    } 
    Bitmap b = ((BitmapDrawable) drawable).getBitmap(); 
    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

    int w = getWidth(), h = getHeight(); 

    Bitmap roundBitmap = getRoundedCroppedBitmap(bitmap, w); 
    canvas.drawBitmap(roundBitmap, 0, 0, null); 

} 

public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) { 
    Bitmap finalBitmap; 
    if (bitmap.getWidth() != radius || bitmap.getHeight() != radius) 
     finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, 
       false); 
    else 
     finalBitmap = bitmap; 
    Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(), 
      finalBitmap.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, finalBitmap.getWidth(), 
      finalBitmap.getHeight()); 

    paint.setAntiAlias(true); 
    paint.setFilterBitmap(true); 
    paint.setDither(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(Color.parseColor("#BAB399")); 
    canvas.drawCircle(finalBitmap.getWidth()/2 + 0.7f, 
      finalBitmap.getHeight()/2 + 0.7f, 
      finalBitmap.getWidth()/2 + 0.1f, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(finalBitmap, rect, rect, paint); 

    return output; 

} 
} 

И бежать, я надеюсь, что это поможет, это даст ожидаемый закругленный изображение, как вы хотели

Смежные вопросы