2014-08-31 81 views
0

好的,我想要一個不可見的位圖,但如果你觸摸它,那麼觸摸的區域將顯示。這本身似乎並不有用,但我只想知道如何去做,所以我可以將它應用到我真正想做的事情上。那麼你如何在android中執行此操作,只繪製位圖的某些像素?安卓繪製位圖的某些像素

+0

在自定義視圖中使用BitmapShader – pskink 2014-08-31 07:40:06

回答

0

一個很好的出發點是羅馬蓋伊的"Fun with shaders"配方,它應該讓你很接近:

因此,通過在畫布上移動形狀,您可以顯示位圖的不同部分。

的基本步驟包括:

創建阿爾法掩模(鏈接的示例使用另一個位圖用於此):

private static Bitmap convertToAlphaMask(Bitmap b) { 
    Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8); 
    Canvas c = new Canvas(a); 
    c.drawBitmap(b, 0.0f, 0.0f, null); 
    return a; 
} 

Bitmap mask; 
mask = convertToAlphaMask(BitmapFactory.decodeResource(getResources(), R.drawable.spot_mask)); 

着色創建Paint實例來繪製面膜用:

private static Shader createShader(Bitmap b) { 
    return new BitmapShader(b, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
} 

Shader targetShader = createShader(mTargetBitmap); 
paint.setShader(targetShader); 

最後,繪製掩模與所述着色器:現在

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawBitmap(mMask, 0.0f, 0.0f, mPaint); 
} 

,在動畫的「光束」在預定的路徑(如在示例代碼)代替,它掛到觸摸事件和從那裏出發。即您可能需要跟蹤觸摸的區域和/或路徑才能獲得理想的效果。

+0

我真的不知道着色器是如何工作的,但是..有什麼辦法可以不使用着色器? – user3843164 2014-08-31 19:11:25

+0

而且當你實例化你放入位圖參數的畫布時,這是什麼意思?當你調用c.drawBitmap在哪裏做圖紙? – user3843164 2014-08-31 19:16:24

+0

如何繪製一個位圖基本上工作? – user3843164 2014-08-31 21:05:45