2013-07-15 2 views
0

Привет, я ищу круглое изображение ListView не как фон, а ListView с загруженными изображениями, имеющими форму круга. Я исследовал его и обнаружил, что ListView вертикальный или горизонтальный ... :(, Я также посмотрел на Radial и галерею, но не нашел реального списка в форме круга (не анимация). Любая помощь будет оценена.Android circle image listview

+0

вы можете уточнить, что вы имеете в виду, даже сг ude рисунок поможет, так как listviews по своей природе являются прямоугольными. – MCWhitaker

+0

Возможно, вы ищете карусель – Blackbelt

+0

вам нужна карусель. ? Https: //code.google.com/p/renderscript-examples/wiki/Carousel. using renderscript – Raghunandan

ответ

0

отсылает код ниже

public class RoundedImageView extends ImageView { 

public RoundedImageView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

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

public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    Drawable drawable = getDrawable(); 

    if (drawable == null) { 
     return; 
    } 

    if (getWidth() == 0 || getHeight() == 0) { 
     return; 
    } 

    Bitmap b = null; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP 
     && drawable instanceof VectorDrawable) { 
     ((VectorDrawable) drawable).draw(canvas); 
     b = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas c = new Canvas(); 
     c.setBitmap(b); 
     drawable.draw(c); 
    } 
    else { 
     b = ((BitmapDrawable) drawable).getBitmap(); 
    } 

    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

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

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

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

    final int color = 0xffa19774; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); 

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


    return output; 
} 
}