2017-12-07 11 views
2

Ich möchte die Höhe der Ansicht ändern und Höhe die gesamte Ansicht von unten verringern. Das funktioniert gut im Fragment, funktioniert aber nicht im Adapter. Ich möchte nicht die Hauptansicht quetschen, ich muss nur die Größe von containerAvatar erhöhen.Wie ändere ich die Höhe der Ansicht im Adapter?

public class OrderAdapter extends ArrayAdapter { 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    convertView = layoutInflater.inflate(R.layout.open_order_item, parent, false); 

    containerAvatar = convertView.findViewById(R.id.container_avatar_size); 
    imgAvatar = convertView.findViewById(R.id.img_open_order_avatar); 

    Glide.with(context) 
      .load("http://neuronovosti.ru/wp-content/uploads/2017/12/Drosophila-Brain-1024x1024.jpg") 
      .into(imgAvatar); 

    containerAvatar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final ViewGroup.LayoutParams lp = containerAvatar.getLayoutParams(); 
      final ResizeAnimation a = new ResizeAnimation(containerAvatar); 
      a.setDuration(500); 
      a.setParams(lp.height, lp.height * 2); 
      containerAvatar.startAnimation(a); 
     } 
    }); 

    return convertView; 
} 

public class ResizeAnimation extends Animation { 
    private int startHeight; 
    private int deltaHeight; // distance between start and end height 
    private View view; 

public ResizeAnimation(View v) { 
    this.view = v; 
} 

@Override 
protected void applyTransformation(float interpolatedTime, Transformation t) { 

    view.getLayoutParams().height = (int) (startHeight + deltaHeight * interpolatedTime); 
    view.requestLayout(); 
} 

public void setParams(int start, int end) { 

    this.startHeight = start; 
    deltaHeight = end - startHeight; 
} 

@Override 
public void setDuration(long durationMillis) { 
    super.setDuration(durationMillis); 
} 

@Override 
public boolean willChangeBounds() { 
    return true; 
} 

enter image description here

Das ist, was Sie
enter image description here

enter image description here

+0

Haben Sie versucht, "Inhaber" mit? –

+0

@GeylaniARCA, nein, ich brauche keine – PeDuCKA

Antwort

2

brauchen Versuchen mit setLayoutParams() Methode der View -

private void setDimensions(View view, int width, int height){ 
    android.view.ViewGroup.LayoutParams params = view.getLayoutParams(); 
    params.width = width; 
    params.height = height; 
    view.setLayoutParams(params); 
} 

hinzugefügt es auf Ihrem Adapter -

public class OrderAdapter extends ArrayAdapter { 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    convertView = layoutInflater.inflate(R.layout.open_order_item, parent, false); 

    containerAvatar = convertView.findViewById(R.id.container_avatar_size); 
    imgAvatar = convertView.findViewById(R.id.img_open_order_avatar); 

    Glide.with(context) 
      .load("http://neuronovosti.ru/wp-content/uploads/2017/12/Drosophila-Brain-1024x1024.jpg") 
      .into(imgAvatar); 

    containerAvatar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      setDimensions(containerAvatar, 100, 100); 
     } 
    }); 

    return convertView; 
} 

private void setDimensions(View view, int width, int height){ 
    android.view.ViewGroup.LayoutParams params = view.getLayoutParams(); 
    params.width = width; 
    params.height = height; 
    view.setLayoutParams(params); 
} 

} 
+0

Ich habe diese Option versucht, es hat nicht geholfen – PeDuCKA

+0

Teilen Sie Ihre 'ResizeAnimation' Klassencode. –

+0

bereit. Ich denke das Problem ist irgendwo im Adapter =) – PeDuCKA

Verwandte Themen