Android Open Source - FadingActionBar Observable Web View With Header






From Project

Back to project page FadingActionBar.

License

The source code is released under:

Apache License

If you think the Android project FadingActionBar listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.manuelpeinado.fadingactionbar.view;
/*w ww  .j  a  v  a2s .  c o m*/

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;

/**
 * Adapted from: http://stackoverflow.com/a/14753235/244576 and http://stackoverflow.com/a/11442374/244576
 */
public class ObservableWebViewWithHeader extends WebView implements ObservableScrollable {
    private OnScrollChangedCallback mOnScrollChangedCallback;

    public ObservableWebViewWithHeader(Context context) {
        super(context);
    }

    public ObservableWebViewWithHeader(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ObservableWebViewWithHeader(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /*
     * Header
     */
    private int headerHeight;

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
       super.onMeasure(widthMeasureSpec, heightMeasureSpec);
       // determine height of title bar
       View title = getChildAt(0);
       headerHeight = title==null ? 0 : title.getMeasuredHeight();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){
       return true;   // don't pass our touch events to children (title bar), we send these in dispatchTouchEvent
    }

    private boolean touchInHeader;

    @Override
    public boolean dispatchTouchEvent(MotionEvent me){

       boolean wasInTitle = false;
       switch(me.getActionMasked()){
       case MotionEvent.ACTION_DOWN:
          touchInHeader = (me.getY() <= visibleHeaderHeight());
          break;

       case MotionEvent.ACTION_UP:
       case MotionEvent.ACTION_CANCEL:
          wasInTitle = touchInHeader;
          touchInHeader = false;
          break;
       }
       if (touchInHeader || wasInTitle) {
          View title = getChildAt(0);
          if(title!=null) {
             // this touch belongs to title bar, dispatch it here
             me.offsetLocation(0, getScrollY());
             return title.dispatchTouchEvent(me);
          }
       }
       // this is our touch, offset and process
       me.offsetLocation(0, -headerHeight);
       return super.dispatchTouchEvent(me);
    }

    /**
     * @return visible height of title (may return negative values)
     */
    private int visibleHeaderHeight(){
       return headerHeight-getScrollY();
    }       

    @Override
    protected void onDraw(Canvas c){
       c.save();
       int tH = visibleHeaderHeight();
       if(tH > 0) {
          // clip so that it doesn't clear background under title bar
          int sx = getScrollX(), sy = getScrollY();
          c.clipRect(sx, sy+tH, sx+getWidth(), sy+getHeight());
       }
       c.translate(0, headerHeight);
       super.onDraw(c);
       c.restore();
    }

    /*
     * Scroll
     */

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        
        View title = getChildAt(0);
        if (title != null)   // undo horizontal scroll, so that title scrolls only vertically
           title.offsetLeftAndRight(l - title.getLeft());

        if (mOnScrollChangedCallback != null)
            mOnScrollChangedCallback.onScroll(l, t);
    }

    public OnScrollChangedCallback getOnScrollChangedCallback() {
        return mOnScrollChangedCallback;
    }

    @Override
    public void setOnScrollChangedCallback(OnScrollChangedCallback callback) {
        mOnScrollChangedCallback = callback;
    }
}




Java Source Code List

com.manuelpeinado.fadingactionbar.FadingActionBarHelperBase.java
com.manuelpeinado.fadingactionbar.FadingActionBarHelper.java
com.manuelpeinado.fadingactionbar.Utils.java
com.manuelpeinado.fadingactionbar.demo.ActivityInfo.java
com.manuelpeinado.fadingactionbar.demo.HeaderOverlayActivity.java
com.manuelpeinado.fadingactionbar.demo.HomeActivity.java
com.manuelpeinado.fadingactionbar.demo.LightActionBarActivity.java
com.manuelpeinado.fadingactionbar.demo.LightBackgroundActivity.java
com.manuelpeinado.fadingactionbar.demo.ListViewActivity.java
com.manuelpeinado.fadingactionbar.demo.NavigationDrawerActivity.java
com.manuelpeinado.fadingactionbar.demo.NoParallaxActivity.java
com.manuelpeinado.fadingactionbar.demo.SampleFragmentActivity.java
com.manuelpeinado.fadingactionbar.demo.SampleFragment.java
com.manuelpeinado.fadingactionbar.demo.ScrollViewActivity.java
com.manuelpeinado.fadingactionbar.demo.ShortContentActivity.java
com.manuelpeinado.fadingactionbar.demo.WebViewActivity.java
com.manuelpeinado.fadingactionbar.extras.actionbarcompat.FadingActionBarHelper.java
com.manuelpeinado.fadingactionbar.extras.actionbarsherlock.FadingActionBarHelper.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.ActivityInfo.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.HeaderOverlayActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.HomeActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.LightActionBarActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.LightBackgroundActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.ListViewActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.NoParallaxActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.SampleFragmentActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.SampleFragment.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.ScrollViewActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarcompat.WebViewActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.ActivityInfo.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.HeaderOverlayActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.HomeActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.LightActionBarActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.LightBackgroundActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.ListViewActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.NoParallaxActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.SampleFragmentActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.SampleFragment.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.ScrollViewActivity.java
com.manuelpeinado.fadingactionbar.samples.actionbarsherlock.WebViewActivity.java
com.manuelpeinado.fadingactionbar.view.ObservableScrollView.java
com.manuelpeinado.fadingactionbar.view.ObservableScrollable.java
com.manuelpeinado.fadingactionbar.view.ObservableWebViewWithHeader.java
com.manuelpeinado.fadingactionbar.view.OnScrollChangedCallback.java
com.manuelpeinado.fadingactionbar.view.RootLayout.java