2014-09-18 45 views
2

我有这样的代码在我的Android应用程序:取2个视图中显示同时在Android的

private void showMyViews() { 

    mAnimation.cancel(); 
    mAnimation.reset(); 
    mAnimateionView.clearAnimation(); 
    mAnimationView.setVisibility(View.GONE); 
    mOtherViewToHide.setVisibility(View.GONE); 

    mFirstViewToShow.setVisibility(View.VISIBLE); 
    mSecondViewToShow.setVisibility(View.VISIBLE); 

} 

但有时mSecondViewToShow mFirstViewToShow之前出现一点点。我怎样才能轻松地迫使这些视图同时出现?

某些代码是:

public class mFragment extends Fragment implements OnClickListener, com.squareup.picasso.Callback { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.mFragment, null); 
    mFirstViewToShow = (RelativeLayout) view 
      .findViewById(R.id.mFirstViewToShow); 
    mSecondViewToShow = (RelativeLayout) view 
      .findViewById(R.id.mSecondViewToShow); 

    ... 
    ... 
    ... 

    if (isConnected()) { 

     animateMagnifier(); 
     updateUserLocation(); 

    } else { 

    } 

} 
private void animateMagnifier() { 

    Thread mThread = new Thread(new Runnable() { 

     @Override 
     public void run() { 

      AppLog.Log(TAG, "ver si la lupa sirve"); 

      if (getActivity() != null) { 

       getActivity().runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

         mAnimationView.setVisibility(View.VISIBLE); 
         animeMagnifier = AnimationUtils 
           .loadAnimation(getActivity(), 
             R.anim.translate_center_amim); 
         mAnimationView.startAnimation(animeMagnifier); 

         // Code use to repeat the animation 
         // See 
         // http://stackoverflow.com/questions/4480652/android-animation-does-not-repeat 

         animeMagnifier 
           .setAnimationListener(new AnimationListener() { 

            @Override 
            public void onAnimationStart(
              Animation animation) { 
            } 

            @Override 
            public void onAnimationRepeat(
              Animation animation) { 

            } 

            @Override 
            public void onAnimationEnd(
              Animation animation) { 
             animeMagnifier = AnimationUtils 
               .loadAnimation(
                 getActivity(), 
                 R.anim.translate_center_amim); 
             animeMagnifier 
               .setAnimationListener(this); 
             mAnimationView 
               .startAnimation(animeMagnifier); 
            } 
           }); 
        } 
       }); 

      } 
     } 
    }); 
    mThread.start(); 
    try { 
     mThread.join(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

private void updateUserLocation() { 

    ... 
    ... 
    ... 
    sendDataToServer(); 

} 

private void sendDataToServer() { 

    ... 
    ... 
    ... 
    findPerson(); 

} 

private void findPerson() { 

    new BackGroundTaskForFindPerson().execute(); 

} 

private class BackGroundTaskForFindMatch extends 
     AsyncTask<String, Void, Void> { 

    @Override 
    protected Void doInBackground(String... params) { 
     try { 


      findPeopleResponse = mServices.makeHttpRequest(
        Constant.find_people, Constant.methodeName, 
        findPeopleValuePairList); 
      Gson gson = new Gson(); 
      ... 
      ... 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     try { 
      if (success) { 

       if (mFindPeople.getErrNum() == 2) { 

        // no one found 

        mFirstViewToShow.setVisibility(View.GONE); 
        mSecondViewToShow.setVisibility(View.GONE); 

        messageTextView.setText(R.string.no_one_near); 


       } else if (mFindPeople.getErrNum == 3) { 
        ... 
       } else { 

        .... 

       } 
      } else { 

       messageTextView.setText(R.string.no_one_new); 

      } 
     } catch (Exception e) { 
      .... 
     } 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 

} 
+0

由于绘图发生在UI线程上(与您现在正在使用的线程相同),因此此代码不可能像您所解释的那样运行。你是否更改代码中其他地方的这些视图的可见性? – 2014-09-18 19:28:32

+0

@DmitryZaitsev是的,我会根据不同的行为将视图更改为“可见”或“消失”。有“线程”的解决方案吗?或者这太复杂了?谢谢! – 2014-09-18 19:50:36

+0

不,只有涉及的主线程。你能发布所有其他更新可视性的代码吗?我想我知道为什么会发生这种情况,但我需要查看其余的代码。 – 2014-09-18 20:22:13

回答

0

将它们设置为INVISIBLE,而不是GONE这样,他们将被连接到您的布局,但隐藏的。

目前,它们必须在显示之前添加到您的视图层次结构中,这可能是您的延迟。

+0

谢谢!延迟仍在! – 2014-09-18 19:51:19

+0

@JuanCarlosPiñeros这就是精神! – Simas 2014-09-18 19:59:13

相关问题