.Java------------------------------------------------------------------------------------------------------
private GestureDetector gestureScanner; //선언
------ onCreate------
gestureScanner = new GestureDetector(this); //리스너 등록
------ onCreate------
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureScanner.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
위와 같은 방법으로 스크롤뷰에서 제스처 기능을 구현 하였습니다.
그런데 스크롤뷰를 스크롤할때 제스처기능으로 인하여 스크롤이 부드럽게 되지 않고 끊기게 됩니다.
제스처 기능은 살려두고 스크롤뷰의 스크롤이 부드럽게 되게 할려면 어떻게 해야 할까요..
카쿠센님 답변 감사드립니다.
아래와 같이 구현하니 스크롤도 부드럽게 되고 가로 제스처도 잘 반응 하네요..
<java>
package com.gesturelisttest;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;
import android.widget.Toast;
import android.widget.ViewAnimator;
public class GestureListTest extends Activity {
/** Called when the activity is first created. */
ViewAnimator mAnimator;
ScrollView mListView1;
GestureDetector mGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mListView1 = (ScrollView) findViewById(R.id.list_1);
mAnimator = (ViewAnimator) findViewById(R.id.animator);
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
if(Math.abs(velocityX) > 1000 && Math.abs(velocityY) < 500){
if(velocityX < 0){
Toast.makeText(GestureListTest.this, ">>>", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(GestureListTest.this, "<<<", Toast.LENGTH_SHORT).show();
}
}
return false;
}
});
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(mGestureDetector.onTouchEvent(ev)){
return true;
}
return super.dispatchTouchEvent(ev);
}
}
<xml>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ViewAnimator android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:id="@+id/animator">
<ScrollView android:id="@+id/list_1" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/LinearLayout01"
android:background="@drawable/testimg" android:layout_width="fill_parent"
android:layout_height="1000dp"></LinearLayout>
</ScrollView>
</ViewAnimator>
</LinearLayout>
위와 같은 형태는 동일하고 저같은 경우에는,
스크롤뷰에 onTouch를 return true로 터치 이벤트를 아예 막하버리고
제스처 이벤트("gestureScanner.onTouchEvent(event)")를 호출하여
질문하신 취지에는 맞는지 모르지만 스크롤뷰 오브젝트에 Runnable을 써서 smoothScrollTo로 스크롤뷰를 이동시켰습니다.
원하시는대로 완전 부드럽지는 못하지만 어느정도 부드럽게 이동되는 효과가 있습니다.
제가 답변 드린대로는 좌표싸움의 시작입니다. 참고 하시기 바랍니다