Das beliebte Spiel Words with Friends zieht Brief Fliesen auf dem Spielbrett als eine einzige Einheit -Wie erstellt man Relief um ein Bitmap?
Sie können alle Buchstaben Fliesen im folgende Screenshot und auch einen Präge-Effekt am Rande ein gelbe linearen Gradienten angewandt sehen :
In my word game würde Ich mag ähnliche Effekte haben:
So erstelle ich ein Spielbrett Größe mBitmap
, dann alle Steine hinein ziehen und schließlich die Bitmap zeichnen in my custom view -
Setup:
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
// create yellow linear gradient
mGradStart = new Point(3 * mWidth/4, mHeight/3);
mGradEnd = new Point(mWidth/4, 2 * mHeight/3);
LinearGradient gradient = new LinearGradient(
mGradStart.x,
mGradStart.y,
mGradEnd.x,
mGradEnd.y,
new int[]{ 0xCCFFCC00, 0xCCFFCC99, 0xCCFFCC00 },
null,
TileMode.CLAMP);
// create the big bitmap holding all tiles
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPaintGrad = new Paint();
mPaintGrad.setShader(gradient);
mPaintEmboss = new Paint();
mPaintEmboss.setShader(gradient);
EmbossMaskFilter filter = new EmbossMaskFilter(
new float[] { 0f, 1f, 0.5f }, 0.8f, 3f, 3f);
mPaintEmboss.setMaskFilter(filter);
Zeichnung:
@Override
protected void onDraw(Canvas canvas) {
mGameBoard.draw(canvas);
// draw all tiles as rectangles into big bitmap
// (this code will move to onTouchEvent later)
mBitmap.eraseColor(Color.TRANSPARENT);
for (SmallTile tile: mTiles) {
mCanvas.drawRect(
tile.left,
tile.top,
tile.left + tile.width,
tile.top + tile.height,
mPaintGrad);
tile.draw(mCanvas);
}
canvas.drawBitmap(mBitmap, 0, 0, mPaintEmboss); // emboss NOT displayed
canvas.drawText("TEXT WORKS OK", 400, 400, mPaintEmboss); // ebmoss OK
canvas.drawRect(300, 600, 800, 1200, mPaintEmboss); // emboss OK
}
Die EmbossMaskFilter
Effekt funktioniert OK mit drawText()
und drawRect()
Anrufen, aber es funktioniert nicht für die drawBitmap()
:
Meine Frage: ist es möglich, einige Kombinationen von PorterDuff.Mode zu verwenden, um eine ziehen (und extractAlpha
?) Prägen Sie sich um meine große Bitmap?
UPDATE:
von auf HolographicOutlineHelper.java suchen, ich konnte einen äußeren Schatten hinzufügen:
mit dem folgenden Code in MyView.java -
Setup:
Zeichnung:
private void prepareBitmaps() {
mBitmap.eraseColor(Color.TRANSPARENT);
for (SmallTile tile: mTiles) {
mCanvas.drawRect(
tile.left,
tile.top,
tile.left + tile.width,
tile.top + tile.height,
mPaintGrad);
tile.draw(mCanvas);
}
mAlphaBitmap = mBitmap.extractAlpha(mPaintBlur, mOffset);
}
@Override
protected void onDraw(Canvas canvas) {
mGameBoard.draw(canvas);
canvas.drawBitmap(mAlphaBitmap, mOffset[0], mOffset[1], mPaintBlur);
canvas.drawBitmap(mBitmap, 0, 0, mPaintGrad);
}
aber leider ist die App langsam jetzt handelt - und ich weiß noch nicht, wie ein Prägeeffekt um die Bitmap hinzuzufügen.
Danke ... Sie können Emboss gleich aussehen lassen, indem Sie mit 'mScale = getResources() multiplizieren. GetDisplayMetrics(). Dichte;' –
Ja, wollte nur betonen, dass es ein Problem in Demo-Code und Emboss-Effekt könnte schwierig sein wegen der Bildschirmauflösung zu sehen. – varren