Я создаю приложение для чтения книг, для создания этого я использую Это lib для читателя. Эта библиотека очень хорошо работает для книг на английском языке, но она не подходит для персидских книг. Для персидских книг нам нужно прокрутить справа налево. на этой прокрутке библиотеки слева направо. Пожалуйста, помогите мне решить эту проблему. это мой java код для этого приложения.
public class HorizontalWebView extends WebView {
private float x1 = -1;
private int pageCount = 0;
Context mContext;
public HorizontalWebView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
int pageCount = Integer.parseInt(message);
setPageCount(pageCount);
result.confirm();
return true;
}
});
}
public void injectCSS() {
InputStream inputStream = null;
try {
inputStream = mContext.getAssets().open("style.css");
byte[] buffer = new byte[inputStream.available()];
if (inputStream.read(buffer) == 0)
inputStream.close();
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
this.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var style = document.createElement('style');" +
"style.type = 'text/css';" +
// Tell the browser to BASE64-decode the string into your script !!!
"style.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(style)" +
"})()");
} catch (IOException e) {
e.printStackTrace();
}
}
public void injectJavascript() {
String js = "function initialize(){\n" +
" var d = document.getElementsByTagName('body')[0];\n" +
" var ourH = window.innerHeight - 20;\n" +
" var ourW = window.innerWidth - (2*20);\n" +
" var fullH = d.offsetHeight;\n" +
" var pageCount = Math.floor(fullH/ourH)+1;\n" +
" var currentPage = 0;\n" +
" var newW = pageCount*window.innerWidth - (2*20);\n" +
" d.style.height = ourH+'px';\n" +
" d.style.width = newW+'px';\n" +
" d.style.margin = 0;\n" +
" d.style.webkitColumnGap = '40px';\n" +
" d.style.webkitColumnCount = pageCount;\n" +
" return pageCount;\n" +
"}";
this.loadUrl("javascript:$js");
this.loadUrl("javascript:alert(initialize())");
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
break;
case MotionEvent.ACTION_UP:
float x2 = event.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > 100) {
// Left to Right swipe action
if (x2 > x1) {
turnPageLeft();
return true;
}
// Right to left swipe action
else {
turnPageRight();
return true;
}
}
break;
}
return true;
}
private int current_x = 0;
private void turnPageLeft() {
if (getCurrentPage() > 0) {
int scrollX = getPrevPagePosition();
loadAnimation(scrollX);
current_x = scrollX;
scrollTo(scrollX, 0);
}
}
private int getPrevPagePosition() {
int prevPage = getCurrentPage() - 1;
return (int) Math.ceil(prevPage * this.getMeasuredWidth());
}
private void turnPageRight() {
if (getCurrentPage() < pageCount - 1) {
// int paddingOffset = 10;
int scrollX = getNextPagePosition();
loadAnimation(scrollX);
current_x = scrollX;
scrollTo(scrollX, 0);
}
}
private void loadAnimation(int scrollX) {
ObjectAnimator anim = ObjectAnimator.ofInt(this, "scrollX",
current_x, scrollX);
anim.setDuration(500);
anim.setInterpolator(new LinearInterpolator());
anim.start();
}
private int getNextPagePosition() {
int nextPage = getCurrentPage() + 1;
return (int) Math.ceil(nextPage * this.getMeasuredWidth());
}
public int getCurrentPage() {
int n = (int) (Math.ceil((double) getScrollX() / this.getMeasuredWidth()));
return n;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
}