2012-07-04 8 views
5

tôi muốn giới hạn mẫu lặp lại của một tập hợp các mẫu nhỏ ngẫu nhiên thành một vùng cụ thể. Tôi đang tạo một đối tượng (CustomView) bằng cách sử dụng canvas, tôi có kiến ​​thức cách lặp lại một mẫu trên bố cục bằng cách sử dụng mã xml.Làm cách nào để lặp lại một mẫu trong ranh giới tối ưu hóa chế độ xem tùy chỉnh?

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

tính năng này không hoạt động cho canvas.

Tôi về cơ bản muốn sử dụng bitmap làm hình nền cho chế độ xem tùy chỉnh và muốn lặp lại bitmap theo cả hướng X và Y.

nhìn vào hình ảnh này

enter image description here

Trả lời

7

Vui lòng thử với mã này: -

paint = new Paint(Paint.FILTER_BITMAP_FLAG); 
Shader mShader1 = new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); 
paint.setShader(mShader1); 
+1

Tôi sẽ mã này .. –

+0

nó làm việc cảm ơn, Kumar .... –

+0

bạn có thể giúp tôi http://stackoverflow.com/questions/19264300/bitmap-with-tile-mode-repeat-and-round-corners này – Goofy

2

Bạn có thể làm cho thành phần tùy chỉnh của bạn với một bitmap nền lặp đi lặp lại:

BitmapDrawable bitmapBg = new BitmapDrawable(BitmapFactory.decodeResource(
      getResources(), R.drawable.repeatbg)); 
bitmapBg.setTileModeX(Shader.TileMode.REPEAT); 
image.setBackgroundDrawable(bitmapBg); 

Và bạn có thể làm mặt nạ với hình ảnh mà bạn muốn như thế tam giác và bg của bạn.

public static Bitmap getMaskedContactImage(Context context, 
     Bitmap contactImageBitmap, int maskToBeApplied) { 
    Bitmap mask = BitmapFactory.decodeResource(context.getResources(), 
      maskToBeApplied); 
    Bitmap output = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), 
      Config.ARGB_8888); 
    final Rect finalRect = new Rect(0, 0, contactImageBitmap.getWidth(), 
      contactImageBitmap.getHeight()); 
    final Rect originRect = new Rect(0, 0, mask.getWidth(), 
      mask.getHeight()); 
    Canvas canvas = new Canvas(output); 

    Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    xferPaint.setColor(Color.BLACK); 

    xferPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 

    canvas.drawBitmap(contactImageBitmap, finalRect, originRect, null); 
    canvas.drawBitmap(mask, originRect, originRect, xferPaint); 

    contactImageBitmap.recycle(); 
    mask.recycle(); 

    return output; 
} 

Điều đó sẽ sử dụng mặt nạ nơi màu đen là hình ảnh cuối cùng.

Nếu tôi không hiểu lầm, điều đó có thể đạt được những gì bạn đang hiển thị trong quá trình chụp.

Kính trọng, Alex

+0

tại sao im không thể nhập Shader, là nó đòi hỏi bất kỳ tập tin jar. –

+0

Không cần bất kỳ nhu cầu đặc biệt nào, http://developer.android.com/reference/android/graphics/Shader.html từ API 1. Phương thức bitmapDrawable của nó cho chế độ lặp lại http://developer.android.com/reference/ android/graphics/drawable/BitmapDrawable.html # setTileModeXY (android.graphics.Shader.TileMode, android.graphics.Shader.TileMode) – Goofyahead

+0

nó đang xem toàn bộ (mẫu lặp lại đó được áp dụng cho chế độ xem tổng thể khác với chế độ xem tùy chỉnh của tôi mà tôi muốn lặp lại nó tối đa khung nhìn còn lại của khung nhìn tùy chỉnh nên có màu bg). –