Android Open Source - StreamHub-Android-Reviews-App Observable Web View With Header






From Project

Back to project page StreamHub-Android-Reviews-App.

License

The source code is released under:

MIT License

If you think the Android project StreamHub-Android-Reviews-App 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 livefyre.fadingactionbar;
/*  w  w  w.  j  a  v a  2 s  .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.filepicker.sdk.AuthActivity.java
com.filepicker.sdk.AuthError.java
com.filepicker.sdk.BuildConfig.java
com.filepicker.sdk.BuildConfig.java
com.filepicker.sdk.CacheElement.java
com.filepicker.sdk.DataCache.java
com.filepicker.sdk.FPFile.java
com.filepicker.sdk.FPService.java
com.filepicker.sdk.FilePickerAPI.java
com.filepicker.sdk.FilePicker.java
com.filepicker.sdk.FixedSizeList.java
com.filepicker.sdk.Folder.java
com.filepicker.sdk.Inode.java
com.filepicker.sdk.NonThumbnailGridBlockView.java
com.filepicker.sdk.Service.java
com.filepicker.sdk.ThumbnailView.java
livefyre.AppSingleton.java
livefyre.BaseActivity.java
livefyre.DeviceNotConnectedException.java
livefyre.DownloadAllImagesTask.java
livefyre.LFSAppConstants.java
livefyre.LFSConfig.java
livefyre.LFUtils.java
livefyre.LivefyreApplication.java
livefyre.NotifyingScrollView.java
livefyre.ImagesCache.DownloadImageTask.java
livefyre.ImagesCache.ImagesCache.java
livefyre.activities.Edit.java
livefyre.activities.LivefyreSplash.java
livefyre.activities.NewReview.java
livefyre.activities.Reply.java
livefyre.activities.ReviewInDetail.java
livefyre.activities.ReviewsActivity.java
livefyre.adapters.ReviewInDetailAdapter.java
livefyre.adapters.ReviewListAdapter.java
livefyre.fadingactionbar.FadingActionBarHelperBase.java
livefyre.fadingactionbar.FadingActionBarHelper.java
livefyre.fadingactionbar.ListViewActivity.java
livefyre.fadingactionbar.ObservableScrollView.java
livefyre.fadingactionbar.ObservableScrollable.java
livefyre.fadingactionbar.ObservableWebViewWithHeader.java
livefyre.fadingactionbar.OnScrollChangedCallback.java
livefyre.fadingactionbar.RootLayout.java
livefyre.fadingactionbar.Utils.java
livefyre.models.AuthorsBean.java
livefyre.models.ContentBean.java
livefyre.models.ContentTypeEnum.java
livefyre.models.OembedBean.java
livefyre.models.ReviewStatus.java
livefyre.models.Vote.java
livefyre.parsers.AdminClintParser.java
livefyre.parsers.ContentParser.java
livefyre.parsers.ContentUpdateListener.java
livefyre.streamhub.AdminClient.java
livefyre.streamhub.BootstrapClient.java
livefyre.streamhub.BuildConfig.java
livefyre.streamhub.BuildConfig.java
livefyre.streamhub.Config.java
livefyre.streamhub.Helpers.java
livefyre.streamhub.HttpClient.java
livefyre.streamhub.LFSActions.java
livefyre.streamhub.LFSConstants.java
livefyre.streamhub.LFSFlag.java
livefyre.streamhub.StreamClient.java
livefyre.streamhub.WriteClient.java