2016-04-30 14 views
0

Ich habe eine Aktivität mit scrollView, die mehrere Tasten und Textviews enthält erstellt. Bevor ich den DatePicker in meine scrollView-Datei hinzufüge, kann der FPS 60 fps beibehalten. Aber ich verstehe nicht, warum der FPS dramatisch abfällt, wenn ich den DatePicker hinzufüge. Und ich habe nicht herausgefunden, dass ein anderes Widget eine so schlechte Leistung hat.android datepicker Animation Rucken wegen schlechter Leistung

Warum bin ich über die Leistung dieses DatePicker besorgt? Weil ich diesen DatePicker in einem Popup-Fenster mit Popup-Animation anzeigen möchte. Die Animation ruckelt wegen der schlechten Performance des DatePickers ständig. Ich möchte es wirklich verbessern. Pease, gib mir einen Hinweis darauf.

Hier ist meine XML-Datei, die ich den DatePicker hinzugefügt habe.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/common_white" 
    android:orientation="vertical"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

       <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="test_db" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

       <Button 
        android:id="@+id/backup_database" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="backup_database" /> 
       <Button 
        android:id="@+id/restore_database" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="restore_database" /> 
      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/test_result" 
       android:text="hello_world" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <DatePicker 
       android:id="@+id/test_picker" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"></DatePicker> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

Und hier ist, wie ich die Datepicker init

Calendar today = Calendar.getInstance(); 
    int year = today.get(Calendar.YEAR); 
    int month = today.get(Calendar.MONTH) + 1; 
    int day = today.get(Calendar.DAY_OF_YEAR); 
    DatePicker picker = (DatePicker) findViewById(R.id.test_picker); 
    picker.setCalendarViewShown(false); 
    picker.updateDate(year, month, day); 

GPU-Rendering-Profil ohne Datepicker über 60FPS (Ich kann nicht dieses Bild Post wegen kurzer Reputations) GPU-Rendering-Profil mit Datepicker weniger als 60 FPS

GPU rendering profile with DatePicker less than 60FPS

Hierarchieansicht Analyse mit Datepicker, messen mehr als 1 ms , zeichne mehr als 15 ms und kann natürlich nicht 60FPS erreichen.

Hierarchy View analysis with DatePicker

Und ich glaube, mein Telefon nicht so langsam ist, da es leicht 60 FPS bekam könnte, wenn die Palette Beispiel von der Unterstützung v7 Beispiel ausgeführt wird, die viele Textviews und imageviews hält. Hier ist der Screenshot. (Ich kann nicht dieses Bild Post wegen kurzer Reputations)

Antwort

0

Hier kommt die Lösung von mir

Es ist der Schwund Kanteneffekt, der die Leistung des Datumsauswahl verlangsamen. Detaillierte Informationen entnehmen Sie bitte

Why are fading edges slow?

und

http://www.curious-creature.com/2008/12/22/why-is-my-list-black-an-android-optimization/

Für Datumsauswahl mit einer guten Leistung verwenden, einfach deaktivieren Sie die Fading Kanteneffekt funktionieren würde.

Für andere Widgets, die den Fading-Edge-Effekt ermöglichen, wird der Zeichenprozess verlangsamt.

Wie man eigene benutzerdefinierte Fading-Edge-Effekt machen?

Zeichnen Sie einen verblassenden Rand ziehbar auf eigene Ansicht wie folgt aus:

private final PaintDrawable mGradientDrawable; 
private final ShapeDrawable.ShaderFactory mShaderFactory; 

mShaderFactory = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient lg = new LinearGradient(0, 0, 0, height, 
       new int[]{ 
         0xffffffff, 
         0x00ffffff, 
         0x00ffffff, 
         0xffffffff,}, 
       new float[]{0, 0.3f, 0.5f, 1}, 
       Shader.TileMode.REPEAT); 
     return lg; 
    } 
}; 
mGradientDrawable = new PaintDrawable(); 
mGradientDrawable.setShape(new RectShape()); 
mGradientDrawable.setShaderFactory(mShaderFactory); 

Die ziehbar einen Gradienten von Farbe weiß transparent erstellen.