As I understand it, the goal is to have a lined background image with some curved corners. 
This is not a perfect pixel, but as close as possible.
first, here are some layouts that I use to draw this button
the_button.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/wrapper_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/bg_curved_tiled" android:padding="20dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Some Text" /> </FrameLayout>
and this is used as background
bg_curved_tiled.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@id/layer_needs_rounding"> <bitmap android:src="@drawable/patch" android:tileMode="repeat" /> </item> <item> <shape android:shape="rectangle" android:useLevel="false" > <stroke android:width="3dp" android:color="#666666" /> <solid android:color="@null" /> <corners android:bottomLeftRadius="@dimen/radius_corner_default" android:bottomRightRadius="@dimen/radius_corner_default" android:radius="@dimen/radius_corner_default" android:topLeftRadius="@dimen/radius_corner_default" android:topRightRadius="@dimen/radius_corner_default" /> </shape> </item> </layer-list>
At this point you have an image similar to this

As you can see, the tiled raster map sticks out at the corners past a curved shape superimposed on top of it.
So now you need a function that rounds the corners of the bitmap ... I got this elsewhere in stackoverflow
public static Bitmap createRoundedCornerBitmap(Context context, Bitmap input, float roundPx, boolean squareTL, boolean squareTR, boolean squareBR, boolean squareBL) { if (input == null) { return null; } final int w = input.getWidth(), h = input.getHeight(); Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, w, h); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
Almost there! I hate this part - I have not found a better way to get a Bitmap object that has the actual broken bitmap in it. For example, BitmapDrawable.getBitmap just gives you an individual patch raster image, rather than a tiled re-patch canvas ... bummer. So instead I get a drawing file cache. You have to make sure that the view was fully initialized first (the height and width were defined and aligned accordingly), so the post also processed for viewing.
private void shaveOffCorners(final ViewGroup view) { view.post(new Runnable() { @Override public void run() {
And as I did, I hope this helps!
If someone knows a less terrible way to accomplish this, please share. Also, if anyone knows how to get a tiled bitmap that is different from clearing the drawing cache, that would also be useful - all hiding and restoring child views is a little flabby.