未调用startAnimation()

时间:2012-11-21 09:58:22

标签: android-animation

我正在尝试使用两个片段实现Youtube样式的滑动菜单。我创建了一个自定义动画,它将改变左片段的宽度,并在按下操作栏上的应用程序图标时调用切换功能。 Expand.java将增加宽度,而Collapse.java将减小宽度。当我从MainActivity.java的onCreate()调用startAnimation()函数时,它工作正常。但是,当我使用toggle()调用它时,它不起作用,虽然Expand.java和Collapse.java的构造函数是

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<LinearLayout 
 android:id="@+id/f1"     
     android:layout_height="match_parent"
    android:layout_width="0dip"  
    >

 <fragment
    android:id="@+id/listFragment"     
     android:layout_height="match_parent"
    android:layout_width="match_parent"   
    class="com.surv.ui123.FragLeft" >

 </fragment>
 </LinearLayout>
 <LinearLayout
    android:id="@+id/f2"     
     android:layout_height="match_parent"
    android:layout_width="match_parent"  
    >

<fragment
    android:id="@+id/detailFragment"
    android:layout_width="match_parent"     
    android:layout_height="match_parent"        
    class="com.surv.ui123.FragRight" >
      </fragment>

</LinearLayout>
</LinearLayout>

FragLeft.java

package com.surv.ui123;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public class FragLeft extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragleft,
    container, false);


return view;
} 
}

FragRight.java

package com.surv.ui123;


import android.support.v4.app.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public class FragRight extends Fragment {

 @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragright,
        container, false);      
return view;
}
}

Expand.java

package com.surv.ui123;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.widget.Toast;


public class Expand extends Animation implements Animation.AnimationListener {
private View view;
private static long ANIMATION_DURATION;
private int FromWidth;
private int ToWidth;

public Expand(View v, int FromWidth, int ToWidth) {

    this.view = v;
    ANIMATION_DURATION = 1;
    this.FromWidth = FromWidth;
    this.ToWidth = ToWidth;
    setDuration(ANIMATION_DURATION);
    setRepeatCount(10);
    setFillAfter(false);
    setInterpolator(new AccelerateInterpolator());
    Toast.makeText(view.getContext(),"Expand",Toast.LENGTH_SHORT).show();
    setAnimationListener(this);

}

@Override
public void onAnimationEnd(Animation arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub

    LayoutParams lyp =  view.getLayoutParams();     
    lyp.width = lyp.width+(int)(ToWidth/10);
    view.setLayoutParams(lyp);

}

@Override
public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub

    Toast.makeText(view.getContext(),"Strarted     Expand",Toast.LENGTH_SHORT).show();
}

}

Collapse.java

package com.surv.ui123;

import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.widget.Toast;

public class Collapse extends Animation implements Animation.AnimationListener {

private View view;
private static long ANIMATION_DURATION;

private int FromWidth;
private int ToWidth;
public Collapse(View v, int ToWidth, int FromWidth) {

    Toast.makeText(view.getContext(),"Collapse",Toast.LENGTH_SHORT).show();
    this.view = v;      
    ANIMATION_DURATION = 1;
    this.FromWidth = FromWidth;
    this.ToWidth = ToWidth;
    setDuration(ANIMATION_DURATION);
    setRepeatCount(10);
    setFillAfter(false);
    setInterpolator(new AccelerateInterpolator());
    setAnimationListener(this);
}


@Override
public void onAnimationEnd(Animation animation) {
    // TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animation animation) {
    LayoutParams lyp =  view.getLayoutParams();     
    lyp.width = lyp.width-(int)(ToWidth/10);
    view.setLayoutParams(lyp);  
}

@Override
public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub



}

}

MainActivity.java

package com.surv.ui123;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import com.actionbarsherlock.app.SherlockFragmentActivity;



 public class MainActivity extends SherlockFragmentActivity {

 LinearLayout MenuList,RFrg;
 boolean isExpanded=true;    
 int screenWidth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_main);

    MenuList = (LinearLayout) findViewById(R.id.f1);
    RFrg=(LinearLayout) findViewById(R.id.f2);
    LayoutParams lyp =  RFrg.getLayoutParams();     

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        screenWidth = metrics.widthPixels;
        lyp.width = screenWidth;

        RFrg.setLayoutParams(lyp);
        getSupportActionBar().setHomeButtonEnabled(true);               

}

@Override
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item)           {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; go home
                toggle();

                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }


    public void toggle()
    {       

    isExpanded=!isExpanded;

        if (isExpanded) {
            Collapse x= new Collapse(MenuList, 0,(int)(screenWidth*0.75));
            MenuList.startAnimation(x);
        }else {
            Expand d=new Expand(MenuList, 0,(int)(screenWidth*0.75));

            MenuList.startAnimation(d);
        }
    }                                                   


 }

0 个答案:

没有答案