2

J'ai un ListView qui a dans chaque ligne 2 TextView et un CheckBox.Animer un arrière-plan sur listview

Je dessinable (une ligne), que je veux une fois que l'utilisateur cocher la case que l'drawable sera échelle comme une animation à l'arrière-plan de la ligne CheckBox vérifié, j'ai pu dans mon getView() méthode sur mon adaptateur personnalisé, pour animer le dessinable en arrière-plan, mais aussi pour redimensionner les 2 TextView et le CheckBox, et je veux que seul le fond dessinable sera l'échelle comme une animation, comment puis-je faire cela?

ici est mon getView() méthode sur l'adaptateur personnalisé:

public View getView(final int position, View convertView, final ViewGroup parent) { 
    final ViewHolder holder; 

    LayoutInflater inflater = LayoutInflater.from(context); 
    convertView = inflater.inflate(R.layout.listview_item_row, parent, false); 
    // cache view fields into the holder 
    holder = new ViewHolder(); 
    holder.itemTitle = (TextView) convertView.findViewById(R.id.itemTitle); 
    holder.itemQuantity = (TextView) convertView.findViewById(R.id.itemQuantity); 
    holder.itemCheck = (CheckBox) convertView.findViewById(R.id.itemCheck); 
    convertView.setTag(holder); 

    final Cursor cursor = getCursor(); 
    final View rowView = convertView; 
    cursor.moveToPosition(position); 
    holder.itemTitle.setText(cursor.getString((cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)))); 
    holder.itemQuantity.setText(cursor.getString((cursor.getColumnIndex(MySQLiteHelper.KEY_QUANTITY)))); 
    holder.itemCheck.setChecked(cursor.getInt(cursor.getColumnIndex(MySQLiteHelper.KEY_CHECKED)) == 1); 

    holder.itemCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        cursor.moveToPosition(position); 
        itemsDataSource.updateItemCheckBox(1, cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.KEY_ID))); 
        itemsDataSource.updateRoute(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)), true); 
        Animation drawLine = AnimationUtils.loadAnimation(context, R.anim.item_done); 
        rowView.setBackgroundResource(R.drawable.line); 
        rowView.startAnimation(drawLine); 
        ShowListActivity.PRIORITY++; 
       } 
       else { 
        cursor.moveToPosition(position); 
        itemsDataSource.updateItemCheckBox(0, cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.KEY_ID))); 
        itemsDataSource.updateRoute(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)), false); 
        rowView.setBackgroundResource(0); 
        ShowListActivity.PRIORITY--; 
       } 

      } 
     }); 
    if (holder.itemCheck.isChecked()) rowView.setBackgroundResource(R.drawable.line); 
    else rowView.setBackgroundResource(0); 
    return rowView; 
} 
private static class ViewHolder { 
    TextView itemTitle; 
    TextView itemQuantity; 
    CheckBox itemCheck;  
} 
+0

le code peut donner une meilleure idée. –

+0

s'il vous plaît partager votre code à la place juste une théorie – swiftBoy

+0

http://www.java-samples.com/showtutorial.php?tutorialid=1515 lire ce tutoriel avec animation d'échelle dans Listview peut être son utile pour vous – DynamicMind

Répondre

1

mise à jour

J'ai réussi à résoudre le problème:

d'abord je changé la mise en page de ligne personnalisée déposer comme ceci:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/frameRowLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingLeft="5dp" 
android:paddingRight="5dp" 
android:weightSum="10"> 

<LinearLayout android:id="@+id/rowLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <CheckBox android:id="@+id/itemCheck" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="5dp" 
      android:layout_marginTop="5dp" 
      android:layout_weight="2" android:gravity="center" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:singleLine="false" /> 

     <TextView android:id="@+id/itemTitle" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_marginBottom="5dp" 
      android:layout_marginTop="5dp" 
      android:layout_weight="6" 
      android:gravity="center" 
      android:text="some text1" 
      android:textColor="#2B89A8" 
      android:textSize="22dp" 
      android:textStyle="bold" /> 

     <TextView android:id="@+id/itemQuantity" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_marginBottom="5dp" 
      android:layout_marginTop="5dp" 
      android:layout_weight="2" 
      android:gravity="center" 
      android:text="some text2" 
      android:textColor="#2B89A8" 
      android:textSize="22dp" 
      android:textStyle="bold" /> 

</LinearLayout> 

<View 
    android:id="@+id/backgroundView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

</FrameLayout> 

l'idée de Framelayout est que les vues peuvent se chevaucher, là pour la vue après que LinearLayout chevauche LinearLayout.

je changé ma getView() méthode dans mon adaptateur personnalisé de la manière suivante:

public View getView(final int position, View convertView, final ViewGroup parent) { 
    final ViewHolder holder; 

    LayoutInflater inflater = LayoutInflater.from(context); 
    convertView = inflater.inflate(R.layout.listview_item_row, parent, false); 
    // cache view fields into the holder 
    holder = new ViewHolder(); 
    holder.itemTitle = (TextView) convertView.findViewById(R.id.itemTitle); 
    holder.itemQuantity = (TextView) convertView.findViewById(R.id.itemQuantity); 
    holder.itemCheck = (CheckBox) convertView.findViewById(R.id.itemCheck); 
    holder.rowView = (View) convertView.findViewById(R.id.backgroundView); 
    convertView.setTag(holder); 

    final Cursor cursor = getCursor(); 
    cursor.moveToPosition(position); 
    holder.itemTitle.setText(cursor.getString((cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)))); 
    holder.itemQuantity.setText(cursor.getString((cursor.getColumnIndex(MySQLiteHelper.KEY_QUANTITY)))); 
    holder.itemCheck.setChecked(cursor.getInt(cursor.getColumnIndex(MySQLiteHelper.KEY_CHECKED)) == 1); 

    holder.itemCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        cursor.moveToPosition(position); 
        itemsDataSource.updateItemCheckBox(1, cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.KEY_ID))); 
        itemsDataSource.updateRoute(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)), true); 
        Animation drawLine = AnimationUtils.loadAnimation(context, R.anim.item_done); 
        holder.rowView.setBackgroundResource(R.drawable.line); 
        holder.rowView.startAnimation(drawLine); 
        ShowListActivity.PRIORITY++; 
       } 
       else { 
        cursor.moveToPosition(position); 
        itemsDataSource.updateItemCheckBox(0, cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.KEY_ID))); 
        itemsDataSource.updateRoute(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)), false); 
        holder.rowView.setBackgroundResource(0); 
        ShowListActivity.PRIORITY--; 
       } 

      } 
     }); 
    if (holder.itemCheck.isChecked()) holder.rowView.setBackgroundResource(R.drawable.line); 
    else holder.rowView.setBackgroundResource(0); 
    return convertView; 
} 
private static class ViewHolder { 
    TextView itemTitle; 
    TextView itemQuantity; 
    CheckBox itemCheck; 
    View rowView; 
} 

espérons que vous pouvez comprendre ce que je faisais.

Questions connexes