2

J'essaie de mettre en œuvre le flux de couverture en utilisant (Neil Davies implementation). Dans mon application, je dois utiliser l'accélération matérielle, mais lorsque j'ai défini la propriété Accélération matérielle sur true, cette implémentation Coverflow ne fonctionne pas correctement (elle rend les conversions de caméra très irrégulières et bloque lors du défilement).Vue de l'écoulement de couverture invalidation cycle sans fin

J'ai essayé de désactiver l'accélération matérielle uniquement sur le calque d'affichage - cela ne m'a pas aidé.

Selon certaines solutions, j'ai trouvé here, or here (et quelques autres), je dois appeler View.invalidate() après avoir appliqué la traduction de la caméra. Comme vous pouvez le voir dans l'extrait de code ci-joint, j'ai ajouté cette ligne, mais après avoir ajouté cet appel invalidate() cette fonction transformImageBitmap() est appelée dans un cycle sans fin. Comme je comprends après l'invalidation de la vue, la vue est "mise en page" et le transformImageBitmap() appelé à nouveau. Ce cycle sans fin de la fonction transformImageBitmap() provoque des problèmes de préformage dans mon application.

Voici mon transformImageBitmap() fonction:

private void transformImageBitmap(View child, Transformation t, int rotationAngle) 
{    
    mCamera.save(); 
    final Matrix imageMatrix = t.getMatrix(); 
    final int imageHeight = child.getLayoutParams().height; 
    final int imageWidth = child.getLayoutParams().width; 

    mCamera.translate(0.0f, 0.0f, 100.0f); 

    float zoomAmount = 0; 
    zoomAmount = Math.abs((float) (rotationAngle)); 

    mCamera.translate(0.0f, 0.0f, zoomAmount - 300.0f); 

    mCamera.getMatrix(imageMatrix);    
    imageMatrix.preTranslate(-(imageWidth/2), -(imageHeight/2)); 
    imageMatrix.postTranslate((imageWidth/2), (imageHeight/2)); 
    mCamera.restore(); 

    Log.e(LOG_TAG, "in transformImageBitmap"); 
    child.invalidate(); 
} 

Comment puis-je faire ce travail correctement?

Répondre

0

Je teste une solution et réussis. C'est désactiver l'accélération hardward dans votre activité. Je veux dire toute l'activité parce que je l'ai aussi fait sur View et le bug n'est toujours pas corrigé.

Tout ce que vous devez faire est d'ajouter:

<activity android:hardwareAccelerated="false" /> 

vous manifeste l'activité.

+0

J'ai essayé les deux options, à savoir la balise hardwareAcceleration définie sur false et child.invalidate() dans la méthode transformImageBitmap(), mais je vois toujours l'invalidation de la vue constante. aidez-moi s'il vous plaît à explorer d'autres options. – Ari

Questions connexes