Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
847fa448
Kaydet (Commit)
847fa448
authored
Tem 15, 2013
tarafından
Miklos Vajna
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
LibreOffice4Android: support pinch zoom and dragging around while in zoom
Change-Id: Ic8e4cb30acff734e6860dfc9bb31e836d2ecd32d
üst
9f767603
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
136 additions
and
1 deletion
+136
-1
DocumentLoader.java
...e4Android/src/org/libreoffice/android/DocumentLoader.java
+136
-1
No files found.
android/experimental/LibreOffice4Android/src/org/libreoffice/android/DocumentLoader.java
Dosyayı görüntüle @
847fa448
...
@@ -32,6 +32,7 @@ package org.libreoffice.android;
...
@@ -32,6 +32,7 @@ package org.libreoffice.android;
import
org.libreoffice.R
;
import
org.libreoffice.R
;
import
android.app.Activity
;
import
android.app.Activity
;
import
android.graphics.PointF
;
import
android.graphics.Bitmap
;
import
android.graphics.Bitmap
;
import
android.graphics.Matrix
;
import
android.graphics.Matrix
;
import
android.graphics.Color
;
import
android.graphics.Color
;
...
@@ -41,10 +42,12 @@ import android.graphics.Canvas;
...
@@ -41,10 +42,12 @@ import android.graphics.Canvas;
import
android.graphics.Paint
;
import
android.graphics.Paint
;
import
android.os.AsyncTask
;
import
android.os.AsyncTask
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.util.FloatMath
;
import
android.util.Log
;
import
android.util.Log
;
import
android.view.GestureDetector
;
import
android.view.GestureDetector
;
import
android.view.Gravity
;
import
android.view.Gravity
;
import
android.view.MotionEvent
;
import
android.view.MotionEvent
;
import
android.view.View.OnTouchListener
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
android.view.animation.Animation
;
import
android.view.animation.Animation
;
import
android.view.animation.AnimationSet
;
import
android.view.animation.AnimationSet
;
...
@@ -52,6 +55,7 @@ import android.view.animation.TranslateAnimation;
...
@@ -52,6 +55,7 @@ import android.view.animation.TranslateAnimation;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.RelativeLayout
;
import
android.widget.RelativeLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
android.widget.ImageView.ScaleType
;
import
android.widget.ViewFlipper
;
import
android.widget.ViewFlipper
;
import
android.widget.ViewSwitcher
;
import
android.widget.ViewSwitcher
;
import
android.view.MenuItem
;
import
android.view.MenuItem
;
...
@@ -129,6 +133,7 @@ public class DocumentLoader
...
@@ -129,6 +133,7 @@ public class DocumentLoader
XRenderable
renderable
;
XRenderable
renderable
;
GestureDetector
gestureDetector
;
GestureDetector
gestureDetector
;
ScaleListener
scaleDetector
;
ViewGroup
.
LayoutParams
matchParent
;
ViewGroup
.
LayoutParams
matchParent
;
...
@@ -149,15 +154,19 @@ public class DocumentLoader
...
@@ -149,15 +154,19 @@ public class DocumentLoader
float
velocityY
)
float
velocityY
)
{
{
Log
.
i
(
TAG
,
"onFling: "
+
event1
+
" "
+
event2
);
Log
.
i
(
TAG
,
"onFling: "
+
event1
+
" "
+
event2
);
if
(
scaleDetector
.
inZoom
())
return
false
;
ViewFlipper
flipper
=
documentViewer
.
getFlipper
();
ViewFlipper
flipper
=
documentViewer
.
getFlipper
();
if
(
event1
.
getX
()
-
event2
.
getX
()
>
120
)
{
if
(
event1
.
getX
()
-
event2
.
getX
()
>
120
)
{
if
(((
PageViewer
)
flipper
.
getCurrentView
()).
currentPageNumber
==
pageCount
-
1
)
if
(((
PageViewer
)
flipper
.
getCurrentView
()).
currentPageNumber
==
pageCount
-
1
)
return
false
;
return
false
;
scaleDetector
.
reset
();
documentViewer
.
nextPage
();
documentViewer
.
nextPage
();
return
true
;
return
true
;
}
else
if
(
event2
.
getX
()
-
event1
.
getX
()
>
120
)
{
}
else
if
(
event2
.
getX
()
-
event1
.
getX
()
>
120
)
{
if
(((
PageViewer
)
flipper
.
getCurrentView
()).
currentPageNumber
==
0
)
if
(((
PageViewer
)
flipper
.
getCurrentView
()).
currentPageNumber
==
0
)
return
false
;
return
false
;
scaleDetector
.
reset
();
documentViewer
.
prevPage
();
documentViewer
.
prevPage
();
return
true
;
return
true
;
}
}
...
@@ -188,6 +197,127 @@ public class DocumentLoader
...
@@ -188,6 +197,127 @@ public class DocumentLoader
}
}
class
ScaleListener
implements
OnTouchListener
{
public
ScaleListener
()
{
reset
();
}
public
boolean
onTouch
(
View
v
,
MotionEvent
event
)
{
PageViewer
pageViewer
=
(
PageViewer
)
v
;
ImageView
view
=
(
ImageView
)
pageViewer
.
getCurrentView
();
if
(
view
.
getScaleType
()
==
ScaleType
.
FIT_CENTER
)
{
origValues
=
new
float
[
9
];
view
.
getImageMatrix
().
getValues
(
origValues
);
matrix
.
setValues
(
origValues
);
view
.
setScaleType
(
ScaleType
.
MATRIX
);
}
switch
(
event
.
getAction
()
&
MotionEvent
.
ACTION_MASK
)
{
case
MotionEvent
.
ACTION_DOWN
:
if
(
inZoom
())
{
savedMatrix
.
set
(
matrix
);
start
.
set
(
event
.
getX
(),
event
.
getY
());
mode
=
DRAG
;
}
break
;
case
MotionEvent
.
ACTION_POINTER_DOWN
:
oldDist
=
spacing
(
event
);
if
(
oldDist
>
10
f
)
{
savedMatrix
.
set
(
matrix
);
midPoint
(
mid
,
event
);
mode
=
ZOOM
;
}
break
;
case
MotionEvent
.
ACTION_UP
:
case
MotionEvent
.
ACTION_POINTER_UP
:
mode
=
NONE
;
float
[]
values
=
new
float
[
9
];
view
.
getImageMatrix
().
getValues
(
values
);
currentScaleX
=
values
[
Matrix
.
MSCALE_X
];
currentScaleY
=
values
[
Matrix
.
MSCALE_Y
];
if
(
currentScaleX
<
origValues
[
Matrix
.
MSCALE_X
])
matrix
.
setValues
(
origValues
);
break
;
case
MotionEvent
.
ACTION_MOVE
:
if
(
mode
==
DRAG
)
{
matrix
.
set
(
savedMatrix
);
matrix
.
postTranslate
(
event
.
getX
()
-
start
.
x
,
-
1
*
(
event
.
getY
()
-
start
.
y
));
}
else
if
(
mode
==
ZOOM
)
{
float
newDist
=
spacing
(
event
);
if
(
newDist
>
10
f
)
{
matrix
.
set
(
savedMatrix
);
float
scale
=
newDist
/
oldDist
;
matrix
.
postScale
(
scale
,
scale
,
mid
.
x
,
mid
.
y
);
}
}
break
;
}
view
.
setImageMatrix
(
matrix
);
return
true
;
}
private
float
spacing
(
MotionEvent
event
)
{
float
x
=
event
.
getX
(
0
)
-
event
.
getX
(
1
);
float
y
=
event
.
getY
(
0
)
-
event
.
getY
(
1
);
return
FloatMath
.
sqrt
(
x
*
x
+
y
*
y
);
}
private
void
midPoint
(
PointF
point
,
MotionEvent
event
)
{
float
x
=
event
.
getX
(
0
)
+
event
.
getX
(
1
);
float
y
=
event
.
getY
(
0
)
+
event
.
getY
(
1
);
point
.
set
(
x
/
2
,
y
/
2
);
}
public
void
reset
()
{
if
(
documentViewer
!=
null
)
{
PageViewer
pageViewer
=
(
PageViewer
)
documentViewer
.
viewFlipper
.
getCurrentView
();
((
ImageView
)
pageViewer
.
getCurrentView
()).
setScaleType
(
ScaleType
.
FIT_CENTER
);
}
matrix
=
new
Matrix
();
savedMatrix
=
new
Matrix
();
mode
=
NONE
;
start
=
new
PointF
();
mid
=
new
PointF
();
oldDist
=
1
f
;
origValues
=
null
;
currentScaleX
=
0
;
currentScaleY
=
0
;
}
public
boolean
inZoom
()
{
return
origValues
!=
null
&&
origValues
[
Matrix
.
MSCALE_X
]
<
currentScaleX
;
}
Matrix
matrix
;
// Matrix of the current view
Matrix
savedMatrix
;
// Matrix when the user started the touch.
static
final
int
NONE
=
0
;
static
final
int
DRAG
=
1
;
static
final
int
ZOOM
=
2
;
int
mode
;
PointF
start
;
PointF
mid
;
float
oldDist
;
float
[]
origValues
;
float
currentScaleX
;
float
currentScaleY
;
}
class
MyXController
class
MyXController
implements
XController
implements
XController
{
{
...
@@ -950,6 +1080,7 @@ public class DocumentLoader
...
@@ -950,6 +1080,7 @@ public class DocumentLoader
extras
=
getIntent
().
getExtras
();
extras
=
getIntent
().
getExtras
();
gestureDetector
=
new
GestureDetector
(
this
,
new
GestureListener
());
gestureDetector
=
new
GestureDetector
(
this
,
new
GestureListener
());
scaleDetector
=
new
ScaleListener
();
try
{
try
{
long
t0
=
System
.
currentTimeMillis
();
long
t0
=
System
.
currentTimeMillis
();
...
@@ -1092,7 +1223,11 @@ public class DocumentLoader
...
@@ -1092,7 +1223,11 @@ public class DocumentLoader
@Override
@Override
public
boolean
onTouchEvent
(
MotionEvent
event
)
public
boolean
onTouchEvent
(
MotionEvent
event
)
{
{
return
gestureDetector
.
onTouchEvent
(
event
);
if
(
gestureDetector
.
onTouchEvent
(
event
))
return
true
;
if
(
scaleDetector
.
onTouch
(
documentViewer
.
viewFlipper
.
getCurrentView
(),
event
))
return
true
;
return
false
;
}
}
@Override
@Override
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment