1

I need to create a rounded ImageView in Android. Now I use Canvas.clipPath() but hardware acceleration isn't supported by it. Of course I use View.LAYER_TYPE_SOFTWARE for this view.

public class RoundedCornerImageView extends MaptrixImageView
{   
    private final Path clipPath = new Path();

    public RoundedCornerImageView(Context context)
    {
        this(context, null);
    }

    @SuppressLint("NewApi")
    public RoundedCornerImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        if (Build.VERSION.SDK_INT >= 11) {
               setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) 
    {   
        float radius = ((float) getWidth()) / 2;

        clipPath.reset();
        clipPath.addCircle(radius, radius, radius, Path.Direction.CW);

        canvas.clipPath(clipPath);
        super.onDraw(canvas);
    }
}

But I would like use hardware acceleration with this View. Can I use the XferMode class for this ImageView?

biddulph.r
  • 5,226
  • 3
  • 32
  • 47
Nik
  • 7,114
  • 8
  • 51
  • 75

1 Answers1

0

XferMode works with hardware acceleration. It has some limitations though: http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported

However if you still want to use clipPath you won't be able to use the hardware acceleration.

Ricardo Belchior
  • 576
  • 1
  • 3
  • 14