2017-02-13 16 views
0

может пользовательский веб-просмотр прокручивать по горизонтали и с помощью pagination.so, что мои страницы будут погружены в куски. Как достичь этого? любое предложение, которое я застрял в этой проблеме.пользовательский веб-просмотр в андроиде с горизонтальной прокруткой

webView.setWebViewClient(new WebViewClient(){ 

      public void onPageFinished(WebView view, String url) { 
       //injectJavascript(view); 

       ScreenUtils screen = new ScreenUtils(MainActivity.this); 

       int deviceHeight = screen.getRealHeight(); 

       int deviceWidth = screen.getRealWidth(); 


       String varMySheet = "var mySheet = document.styleSheets[0];"; 

       String addCSSRule = "function addCSSRule(selector, newRule) {" 
         + "ruleIndex = mySheet.cssRules.length;" 
         + "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);" 

         + "}"; 


       float height=webView.getMeasuredHeight()/getResources().getDisplayMetrics().density; 
        String insertRule1 = "addCSSRule('html', 'margin:0px; padding:0px; height: " 
         + (height) 
         + "px; -webkit-column-gap: 0px; -webkit-column-width: " 
         + webView.getMeasuredWidth() + "px;')"; 


       webView.loadUrl("javascript:" + varMySheet); 
       webView.loadUrl("javascript:" + addCSSRule); 
       webView.loadUrl("javascript:" + insertRule1); 
      } 

     }); 
    } 

Я пробовал вышеуказанный код, но не имеет разбивки на страницы, а также имеет дополнительную прокладку внизу.

+0

вы делаете читатель EPUB? – Redman

+0

да я делаю EPUB читатель –

+0

увидеть мой ответ ниже, я делаю читатель EPUB слишком – Redman

ответ

1

Это то, что я использовал для того чтобы достигнуть PAGINATION

Вы должны использовать пользовательский WebView, чтобы получить общую ширину Scroll

вот что я использую

public class WebViewWidth extends WebView { 


    Context context; 
    private boolean bAllowScroll = true; 

    public WebViewWidth(Context context) { 
     super(context); 
     this.context = context; 

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


    public int getContentWidth() 
    { 
     return this.computeHorizontalScrollRange(); 
    } 
    public int getTotalHeight() 
    { 
     return this.computeVerticalScrollRange(); 
    } 
} 

и в основной деятельности WebViewWidth webView как глобальная переменная

webView = (WebViewWidth) findViewById(R.id.webView); 

и когда вы устанавливаете WebView клиент

@Override 
    public void onPageFinished(final WebView view, String url) { 


     final WebView myWebView = (WebView) view; 


     String varMySheet = "var mySheet = document.styleSheets[0];"; 

     String addCSSRule = "function addCSSRule(selector, newRule) {" 
       + "ruleIndex = mySheet.cssRules.length;" 
       + "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);" 

       + "}"; 

     String insertRule1 = "addCSSRule('html', 'padding: 0px; height: " 
       + (myWebView.getMeasuredHeight()/mContext.getResources().getDisplayMetrics().density) 
       + "px; -webkit-column-gap: 0px; -webkit-column-width: " 
       + myWebView.getMeasuredWidth() + "px;')"; 

     myWebView.loadUrl("javascript:" + varMySheet); 
     myWebView.loadUrl("javascript:" + addCSSRule); 
     myWebView.loadUrl("javascript:" + insertRule1); 


     view.setVisibility(View.VISIBLE); 
     super.onPageFinished(view, url); 

     //giving delay of 2 sec ,else Totalscrollwidth is giving 0 
     CountDownTimer test = new CountDownTimer(3000, 1000) { 

      @Override 
      public void onTick(long millisUntilFinished) { } 

      @Override 
      public void onFinish() { 

       int widthis = webView.getContentWidth(); 

       TotalScrollWidth = widthis; 

        TotalPages = (TotalScrollWidth/ScreenWidth) - 1; 

       progressdialog.dismiss(); 

      } 
     }; 
     test.start(); 
    } 

рассчитать ширину экрана и Общей ширину прокручиваемого WebView

Теперь TotalPages = Totalscrollwidth/screenwidth -1

для расчета ширины экрана

Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 

    ScreenWidth = width; 

Теперь реализовать пользовательские салфетки даже для веб-просмотра, когда пользователь проскакивает вправо, вы просматриваете веб-просмотр по ширине экрана расстояние

некоторые вещи, как этот

webView.setOnTouchListener(new OnSwipeTouchListener(this) { 
     @Override 
     public void onSwipeLeft() { 
      // Whatever 
      loadnextpage(); 
     } 

     @Override 
     public void onSwipeRight() { 

      loadpreviouspage(); 

     } } 

    @Override 
     public void newTouch() { 
     // Do what ever needed for single tap action 
     } 


    }); 

и

public void loadnextpage() { 


    if (TotalPages > PresentPage) { 
     PresentPage++; 
     webView.scrollTo(PresentPage * ScreenWidth, 0); 

    } else { 

      Toast.makeText(getApplicationContext(), "The End", Toast.LENGTH_SHORT).show(); 

    } 

мой на красть сенсорным у слушателя

public class OnSwipeTouchListener implements OnTouchListener { 

private final GestureDetector gestureDetector; 
private static final int MAX_CLICK_DURATION = 1000; 
private static final int MAX_CLICK_DISTANCE = 15; 
static Context mcontext; 
private long pressStartTime; 
private float pressedX; 
private float pressedY; 
private boolean stayedWithinClickDistance; 
View inflationView; 




public int getLocationx() { 
    return Locationx; 
} 

public void setLocationx(int locationx) { 
    Locationx = locationx; 
} 

public int Locationx; 

public int getLocationy() { 
    return Locationy; 
} 

public void setLocationy(int locationy) { 
    Locationy = locationy; 
} 

public int Locationy; 

@SuppressWarnings("static-access") 
public OnSwipeTouchListener(Context context) { 
    gestureDetector = new GestureDetector(context, new GestureListener()); 
    this.mcontext=context; 

} 

public void onSwipeLeft() { 
} 

public void onSwipeRight() { 
} 
public void newTouch(){ 

} 

public boolean onTouch(View v, MotionEvent event) { 


     this.inflationView=v; 
     gestureDetector.onTouchEvent(event); 


    if(event.getAction()== MotionEvent.ACTION_MOVE) 
    { 
      if (stayedWithinClickDistance && distance(pressedX, pressedY, event.getX(), event.getY()) > MAX_CLICK_DISTANCE) { 
       stayedWithinClickDistance = false; 
      } 
     return true; 
    } 

    else if (event.getAction()== MotionEvent.ACTION_DOWN) { 
     pressStartTime = System.currentTimeMillis();     
     pressedX = event.getX(); 
     pressedY = event.getY(); 
     stayedWithinClickDistance = true; 

     return v.onTouchEvent(event); 
    } 
    else if(event.getAction()== MotionEvent.ACTION_UP) { 

     long pressDuration = System.currentTimeMillis() - pressStartTime; 
     if (pressDuration < MAX_CLICK_DURATION && stayedWithinClickDistance) { 
      newTouch(); 
     } 
     setLocationx((int)event.getX()); 
     setLocationy((int)event.getY()); 
     return v.onTouchEvent(event); 
    } 
    else{ 
     return v.onTouchEvent(event); 
    } 

} 
private static float distance(float x1, float y1, float x2, float y2) { 
    float dx = x1 - x2; 
    float dy = y1 - y2; 
    float distanceInPx = (float) Math.sqrt(dx * dx + dy * dy); 
    return pxToDp(distanceInPx); 
} 

private static float pxToDp(float px) { 
    return px/mcontext.getResources().getDisplayMetrics().density; 
} 






private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_DISTANCE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      float distanceX = e2.getX() - e1.getX(); 
      float distanceY = e2.getY() - e1.getY(); 
      if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
       if (distanceX > 0) 
        onSwipeRight(); 
       else 
        onSwipeLeft(); 
       return true; 
      } 
      return false; 
     } 



    } 

} 
+0

Могу я OnSwipeTouchListener кода –

+0

добавил OnswipeTouchListner – Redman

+0

что PresentPage как он рассчитывается –