2015-12-12 38 views
3

後不顯示我會盡我所能來解釋我的問題沒有視頻動畫重新啓動Android的活動

我有一個登錄活動,其中在成功登錄,並的EditText按鈕領域淡出了「日誌」 TextView淡入(使用Facebook Shimmer)。這工作很棒!但是,成功登錄後,我們會收到一個空白的活動(仍然正常)。現在,我覆蓋了後退按鈕,這樣當後退按鈕被按下時,用戶被迫再次登錄。我的問題出現在此時用戶點擊登錄按鈕。編輯文本和按鈕元素很好地淡出,但「登錄」TextView永遠不會淡入。

下面是一些圖片示例。我還會發布LoginActivity.class的源代碼,如果您想下載該項目,可以在以下網址找到:[email protected]:fbgrecojr/Android-Application-Login-Activity-Template.git

如果您下載項目,用戶名:testuser和密碼:testpass將會起作用。

圖片:

  1. 初始登錄(工作) enter image description here

enter image description here

按下返回按鈕,然後在登錄後
  • 登錄嘗試再次(我重寫了重寫意圖)
  • enter image description here

    LoginActivity.class

    package com.projects.fbgrecojr.logintemplate.UI; 
    
    import android.content.Context; 
    import android.content.Intent; 
    import android.net.ConnectivityManager; 
    import android.net.NetworkInfo; 
    import android.os.AsyncTask; 
    import android.os.Handler; 
    import android.support.design.widget.TextInputLayout; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.view.animation.AccelerateInterpolator; 
    import android.view.animation.AlphaAnimation; 
    import android.view.animation.Animation; 
    import android.view.animation.AnimationUtils; 
    import android.view.animation.DecelerateInterpolator; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.LinearLayout; 
    import android.widget.RelativeLayout; 
    import android.widget.Toast; 
    
    import com.facebook.shimmer.ShimmerFrameLayout; 
    import com.projects.fbgrecojr.logintemplate.HTTPManager.HttpManager; 
    import com.projects.fbgrecojr.logintemplate.HTTPManager.RequestPackage; 
    import com.projects.fbgrecojr.logintemplate.Parser.JSONParser; 
    import com.projects.fbgrecojr.logintemplate.R; 
    import com.projects.fbgrecojr.logintemplate.Session.Session; 
    import com.projects.fbgrecojr.logintemplate.Structures.User; 
    import com.projects.fbgrecojr.logintemplate.Utility.UTILITY; 
    
    
    /** 
    * An example full-screen activity that shows and hides the system UI (i.e. 
    * status bar and navigation/system bar) with user interaction. 
    */ 
    public class LoginActivity extends AppCompatActivity implements View.OnClickListener{ 
    
        private EditText userName, password; 
        private Button login; 
        private RelativeLayout image; 
        private LinearLayout button, belowPic; 
        private Animation fadeInImage, fadeInButton, bottomUp, fadeOut; 
        private TextInputLayout inputLayoutName,inputLayoutPassword; 
        private ViewGroup hiddenPanel; 
        private ShimmerFrameLayout container, loggingIn; 
        private static final int SECOND = 1000; 
        private static final int HALF_SECOND = 500; 
        private static final int QUARTER_SECOND = 250; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_login); 
    
         //INITIALIZE ANIMATION ITEMS 
         fadeInImage = new AlphaAnimation(0, 1); 
         fadeInButton = new AlphaAnimation(0, 1); 
         fadeOut = new AlphaAnimation(1.0f,0.0f); 
         bottomUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.bottom_up_animation); 
         fadeInImage.setInterpolator(new AccelerateInterpolator()); //and this 
         bottomUp.setInterpolator(new DecelerateInterpolator()); 
    
         //GET UI ELEMENTS 
         userName = (EditText) findViewById(R.id.userName); 
         password = (EditText) findViewById(R.id.password); 
         login = (Button) findViewById(R.id.login); 
         image = (RelativeLayout) findViewById(R.id.image); 
         button = (LinearLayout) findViewById(R.id.button); 
         container = (ShimmerFrameLayout) findViewById(R.id.shimmer); 
         belowPic = (LinearLayout) findViewById(R.id.below_picture); 
         loggingIn = (com.facebook.shimmer.ShimmerFrameLayout) findViewById(R.id.login_shimmer); 
         hiddenPanel = (ViewGroup)findViewById(R.id.input); 
         inputLayoutName = (TextInputLayout) findViewById(R.id.text_input_username); 
         inputLayoutPassword = (TextInputLayout) findViewById(R.id.text_input_password); 
    
         //SET UI PROPERTIES 
         loggingIn.setVisibility(View.INVISIBLE); 
         userName.setCursorVisible(false); 
         password.setCursorVisible(false); 
         password.setHint("Password"); 
         userName.setHint("Username"); 
         new Handler().postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           userName.setCursorVisible(true); 
           password.setCursorVisible(true); 
           userName.requestFocus(); 
          } 
         }, LoginActivity.SECOND * 3); 
    
         //ANIMATIONS 
         fadeInImage.setDuration(SECOND * 3); 
         fadeOut.setStartOffset(SECOND); 
         fadeOut.setDuration(SECOND); 
         image.setAnimation(fadeInImage); 
         fadeInButton.setStartOffset(SECOND + HALF_SECOND + QUARTER_SECOND); 
         fadeInButton.setDuration(SECOND * 2); 
         button.setAnimation(fadeInButton); 
         hiddenPanel.startAnimation(bottomUp); 
         hiddenPanel.setVisibility(View.VISIBLE); 
         container.setDuration(SECOND * 2 + QUARTER_SECOND); 
         container.setRepeatDelay(QUARTER_SECOND); 
         container.setIntensity((float) 0.15); 
         container.setBaseAlpha((float) 0.75); 
         container.setFadingEdgeLength(3); 
         container.setDropoff((float) 0.40); 
         container.startShimmerAnimation(); 
    
         //ON CLICK LISTENERS 
         login.setOnClickListener(this); 
        } 
    
        public void onClick(View v) { 
         switch (v.getId()) { 
          case R.id.login: 
    
           if(getUserName().getText().toString().equals("") || getUserName().getText().toString().equals(" ")) { 
            inputLayoutName.setError("enter username"); 
           }else if(getPassword().getText().toString().equals("") || getPassword().getText().toString().equals(" ")){ 
            inputLayoutPassword.setError("enter password"); 
           }else{ 
            //webservice 
            if (UTILITY.isOnline(getApplicationContext())) { 
             RequestPackage p = new RequestPackage(); 
             p.setMethod("GET"); 
             p.setUri(UTILITY.UBUNTU_SERVER_URL); 
             p.setParam("query", "user"); 
             p.setParam("username", getUserName().getText().toString()); 
             new WebserviceCallOne().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, p); 
            } else { 
             Toast.makeText(getApplicationContext(), "you are not connected to the internet", Toast.LENGTH_LONG).show(); 
            } 
           } 
           break; 
         } 
        } 
    
        private void animateExit() { 
         //fade out annimation 
         belowPic.startAnimation(fadeOut); 
         belowPic.setVisibility(View.INVISIBLE); 
         fadeInImage.setStartOffset(SECOND * 2); 
         fadeInImage.setDuration(HALF_SECOND); 
         loggingIn.startAnimation(fadeInImage); 
         loggingIn.setVisibility(View.VISIBLE); 
         loggingIn.setDuration(SECOND); 
         loggingIn.startShimmerAnimation(); 
        } 
    
        public EditText getPassword() { 
         return password; 
        } 
    
        public EditText getUserName() { 
         return userName; 
        } 
    
        private class WebserviceCallOne extends AsyncTask<RequestPackage, String, User> { 
         @Override 
         protected User doInBackground(RequestPackage... params) { 
          String content = HttpManager.getData(params[0]); 
          return JSONParser.parseUserFeed(content); 
         } 
    
         @Override 
         protected void onPostExecute(User s) { 
          Session.setCurrentUser(s); 
          //if null, error stacktrace will print to the log. This is expected!! 
          if(Session.getCurrentUser() == null){ //username was incorrect 
           inputLayoutName.setError("username does not exist"); 
          }else{ //check password 
           if(getPassword().getText().toString().equals(s.getPassword())){ //passwords match 
            animateExit(); 
            new Handler().postDelayed(new Runnable() { 
             @Override 
             public void run() { 
              startActivity(new Intent(getApplicationContext(), MainActivity.class)); 
             } 
            },LoginActivity.SECOND * 4); 
           }else{ 
            inputLayoutPassword.setError("password incorrect"); 
           } 
          } 
         } 
        } 
    } 
    

    MainActivity.class

    public class MainActivity extends AppCompatActivity { 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
        } 
    
        /** 
        * Take care of popping the fragment back stack or finishing the activity 
        * as appropriate. 
        */ 
        @Override 
        public void onBackPressed() { 
         startActivity(new Intent(this, LoginActivity.class)); 
        } 
    } 
    

    回答

    0

    你必須調用animateExit();在代碼的onResume methord

    @Override 
        public void onResume() { 
         super.onResume(); 
         animateExit(); 
        } 
    
    +0

    我會嘗試這一點,但是當我調試,執行onCreate方法。 animateExit()方法中的 – frankgreco

    +0

    。它被稱爲成功登錄。引用私有類的onPostExecute()方法WebServiceCallOne – frankgreco

    +0

    此外,將代碼放入onResume並不能解決問題,因爲我在android生命週期方法中重寫並放置了toast調用,並且onCreate()和onResume()始終處於在初始實例和生成的實例中都被調用,點擊後退按鈕 – frankgreco

    0
    1. 覆蓋的onResume()在你的活動。

      嘗試在onresume中開始您的動畫。

    2. 覆蓋的onPause()在你的活動

      嘗試停止你的動畫中的onPause。

    希望這有助於:)