2016-05-16 8 views
2

Ich versuche, einen Screenshot der gedrehten TextView zu machen, die Emoji-Icons enthalten. Aber auf der resultierenden Bitmap sehe ich, dass Emoji nicht gedreht werden! Warum passiert dies? Wie kann ich einen Screenshot mit gedrehten Emoji machen?Wie kann ich Screenshot von gedrehten TextView mit Emoji machen?

Was ich erwarte:

enter image description here

Und das ist, was ich bekommen:

enter image description here

ich diese Methode bin mit Screenshot der Ansicht zu erhalten:

layout.setDrawingCacheEnabled(true); 
layout.buildDrawingCache(); 
Bitmap bitmap = null; 
if (layout.getDrawingCache() != null) 
    bitmap = layout.getDrawingCache().copy(Bitmap.Config.ARGB_8888, false); 
layout.setDrawingCacheEnabled(false); 
layout.destroyDrawingCache(); 

Update: wie ich dachte, wenn ich textView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); dann Emoji nicht selbst in der TextView gedreht werden (wenn Sie TextView drehen - sie werden nicht gedreht werden, werden sie nur wie ein Karussell bewegen), aber immer noch ich don verstehe nicht wirklich, warum das passiert, oder Rotation von Emoji (auf dem ersten Bild) ist nur wegen der Hardwarebeschleunigung?

+0

Bitte posten Sie Ihre xml –

+0

dort 're kein xml, Ansicht erstellt und 'RelativeLayout' zur Laufzeit hinzugefügt –

+0

@AlexanderAgeichenko hast du das jemals herausgefunden? – gbhall

Antwort

1

ok, ich konnte keinen Weg finden, dieses wirklich nervige Problem zu lösen, also musste ich es ein bisschen hacken. Bildansichten funktioniert perfekt mit Rotation. so alles, was ich im Grunde tun, um die Manipulationen mit Bildansicht - und es ist Einstellbildebene ich diese Methode aus dem Emoji Text will mit:

private Bitmap generateBitmapFromText(int size, String res) { 
    TextView tv = new TextView(getContext()); 
    tv.setText(res); 
    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, 150f); 
    tv.setTextColor(0xffffffff); 
    tv.measure(size, size); 
    int questionWidth = tv.getMeasuredWidth(); 
    int questionHeight = tv.getMeasuredHeight(); 
    Bitmap bitmap = Bitmap.createBitmap(questionWidth, questionHeight, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(bitmap); 
    tv.layout(0, 0, questionWidth, questionHeight); 
    tv.draw(c); 
    return bitmap; 
} 

und ich rufe dann

Bitmap bitmap = generateBitmapFromText(stickersStartingSize, res); 
    imageview.setImageBitmap(bitmap);