public void setupListener() {
   final ViewTreeObserver viewTreeObserver = mView.getViewTreeObserver();
   if (viewTreeObserver != null) {
     viewTreeObserver.addOnGlobalLayoutListener(this);
     viewTreeObserver.addOnGlobalFocusChangeListener(this);
     viewTreeObserver.addOnPreDrawListener(this);
     viewTreeObserver.addOnScrollChangedListener(this);
     viewTreeObserver.addOnTouchModeChangeListener(this);
   }
 }
 private void registerListener(View anchor) {
   if (mSuperScrollListener != null) {
     ViewTreeObserver vto =
         (anchor.getWindowToken() != null) ? anchor.getViewTreeObserver() : null;
     if (vto != mViewTreeObserver) {
       if (mViewTreeObserver != null && mViewTreeObserver.isAlive()) {
         mViewTreeObserver.removeOnScrollChangedListener(mSuperScrollListener);
       }
       if ((mViewTreeObserver = vto) != null) {
         vto.addOnScrollChangedListener(mSuperScrollListener);
       }
     }
   }
 }
  public void testAccessOnScrollChangedListener() throws Throwable {
    layout(R.layout.scrollview_layout);
    final ScrollView scrollView = (ScrollView) mActivity.findViewById(R.id.scroll_view);

    mViewTreeObserver = scrollView.getViewTreeObserver();

    final MockOnScrollChangedListener listener = new MockOnScrollChangedListener();
    assertFalse(listener.hasCalledOnScrollChanged());
    mViewTreeObserver.addOnScrollChangedListener(listener);

    runTestOnUiThread(
        new Runnable() {
          @Override
          public void run() {
            scrollView.fullScroll(View.FOCUS_DOWN);
          }
        });
    mInstrumentation.waitForIdleSync();
    new PollingCheck() {
      @Override
      protected boolean check() {
        return listener.hasCalledOnScrollChanged();
      }
    }.run();

    listener.reset();
    assertFalse(listener.hasCalledOnScrollChanged());

    mViewTreeObserver.removeOnScrollChangedListener(listener);
    runTestOnUiThread(
        new Runnable() {
          @Override
          public void run() {
            scrollView.fullScroll(View.FOCUS_UP);
          }
        });
    assertFalse(listener.hasCalledOnScrollChanged());
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SdkData.turingApiManager.setRequestWatcher(new HHttpRequestWatcher(this));

    findViewById(R.id.btn_send).setOnClickListener(this);
    findViewById(R.id.image_voice).setOnClickListener(this);
    ((EditText) findViewById(R.id.type_blank)).addTextChangedListener(new HTextWatcher());

    ((RoundButton) findViewById(R.id.btn_voice))
        .setOnTouchListener(
            new RoundButton.OnTouchListener() {
              @Override
              public void onTouchDown() {
                ASRModule.start(
                    new Runnable() {
                      @Override
                      public void run() {
                        sendMsg(ASRModule.output);
                      }
                    });
              }

              @Override
              public void onTouchUp() {
                ASRModule.stop();
              }
            });

    ViewTreeObserver vto = findViewById(R.id.scroll_chatbox).getViewTreeObserver();
    vto.addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
          @Override
          public void onGlobalLayout() {
            View scrollView = MainActivity.this.findViewById(R.id.scroll_chatbox);
            int height = scrollView.getHeight();
            int scrollValue = lastScrollHeight - height;
            if (scrollValue > 0
                || scrollView.getScrollY() + scrollView.getHeight()
                    != MainActivity.this.findViewById(R.id.layout_chatbox).getHeight())
              scrollView.scrollBy(0, scrollValue);
            else
              scrollView.scrollBy(
                  0,
                  -MainActivity.this.findViewById(R.id.layout_chatbox).getHeight()
                      + scrollY
                      + lastScrollHeight);
            lastScrollHeight = height;
          }
        });
    vto.addOnScrollChangedListener(
        new ViewTreeObserver.OnScrollChangedListener() {
          @Override
          public void onScrollChanged() {
            View scrollView = MainActivity.this.findViewById(R.id.scroll_chatbox);
            scrollY = scrollView.getScrollY();
          }
        });

    findViewById(R.id.scroll_chatbox)
        .setOnTouchListener(
            new View.OnTouchListener() {
              @Override
              public boolean onTouch(View v, MotionEvent event) {
                v.requestFocus();
                return false;
              }
            });

    findViewById(R.id.btn_voice)
        .setOnFocusChangeListener(
            new View.OnFocusChangeListener() {
              @Override
              public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus && !isBtmBarShowing) showBtmBar();
                if (isBtmBarShowing && !hasFocus && !isSendingMsg) hideBtmBar();
              }
            });

    ASRModule.init(this);
    TTSModule.init(this);
  }
package com.actionbarsherlock.internal.widget;
Beispiel #6
0
 protected void zza(ViewTreeObserver viewtreeobserver) {
   viewtreeobserver.addOnScrollChangedListener(this);
 }