2015-12-31 4 views
2

Я хочу показать/скрыть всплывающее окно, используя анимацию expand/collapse от this answer. Мне удалось использовать анимацию, применив ее к всплывающему виду, которое является видом внутри popupwindow. Проблема, с которой я столкнулся сейчас, заключается в том, что когда пользователь касается внешнего popupwindow, popupwindow автоматически отклоняется, и я не могу показать анимацию коллапса, прежде чем отклонять всплывающее окно.Android PopupWindow Пользовательская анимация Java

Вот код, который я написал:

View popupView = View.inflate(context,R.layout.popuplayout, null); 
popup = new PopupWindow(popupView,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
popup.setAnimationStyle(0); 
popup.setOutsideTouchable(true); 
popup.setFocusable(true); 
popup.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
popup.showAsDropDown(anchor, 0, 0); 
popup.setBackgroundDrawable(null); 
popupView.post(new Runnable() { 
    @Override 
    public void run() { 
      expand(popupView); 
    } 
}); 
. 
. 
. 
private void expand(final View v) { 
    final int targetHeight = ((View)v.getParent()).getHeight(); 
    // Older versions of android (pre API 21) cancel animations for views with a height of 0. 
    v.getLayoutParams().height = 1; 
    v.setVisibility(View.VISIBLE); 
    Animation a = new Animation() 
    { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) { 
      v.getLayoutParams().height = interpolatedTime == 1 
        ? LayoutParams.MATCH_PARENT 
        : (int)(targetHeight * interpolatedTime); 
      v.requestLayout(); 
     } 

     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    }; 
    a.setDuration(200); 
    v.startAnimation(a); 
} 

мне было интересно, есть ли способ показать анимацию до увольнения всплывающего окна при касании снаружи без стиля XML или реализовать данную анимацию с помощью XML-анимации.

ответ

1
public class PopupWindowCustom extends PopupWindow{ 
    public dismiss(){ 
    View view = getCustomView(); 
    expand(view); 
    super.dismiss(); 
    } 

    private expand(View view){ 
    //do some anim 
    } 
} 
+0

Не совсем то, что я хотел, но получил и идею для этого :) Спасибо –

-1

Это, как вы должны это сделать,

1) создать два различных набора анимации.

говорят, popup_show.xml и popup_hide.xml и добавить его в Anim папки, в которой вы должны создать внутри Рез папки.

2) Теперь внутри значений папка создать XML под названием styles.xml и добавить эти анимации к ней, как это,

<style name="Animation"> 
    <item name="android:windowEnterAnimation">@anim/popup_show</item> 
    <item name="android:windowExitAnimation">@anim/popup_hide</item> 
</style> 

3) Теперь установите этот стиль вашей PopupWindow анимации,

popup.setAnimationStyle(R.style.Animation); 

Теперь он автоматически обнаруживает окно ввода и выхода и обеспечивает требуемую анимацию. в соответствии с Andro Selva.

+0

Я думаю, что это не полезно, потому что нет возможности реализовать мою пользовательскую анимацию в анимации xml. Таким образом, NO способ создания popup_show и popup_hide анимаций, которые могут расширить/свернуть представление без масштабирования. btw Спасибо за ответ. –

Смежные вопросы