私は地元の新聞用のAndroidアプリを開発しており、ATMは記事間のスワイプを実装しようとしています。私の主な活動はHNappActivityで、記事を表示するための活動はAcrticleActivityです。私の問題は、スワイプがうまくいかず、何が悪いのかわからないので必死になっていることです。スワイプが実装されているコードは次のとおりです。
public class ArticleActivity extends SherlockActivity {
int hnCatIndex, hnArtIndex;
WebView hnWebView;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.article);
hnCatIndex = getIntent().getExtras().getInt("catIndex", 0);
hnArtIndex = getIntent().getExtras().getInt("artIndex", 0);
Article article = Source.getInstance().getCategory(hnCatIndex).getArticle(hnArtIndex);
hnWebView=(WebView)findViewById(R.id.webview);
hnWebView.loadData(article == null ? "" : article.getBody(), "text/html",
"utf-8");
gestureDetector = new GestureDetector(new MyGestureDetector());
View articleview=(View) findViewById(R.id.article_main);
articleview.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
});
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
hnArtIndex++;
Intent intent = new Intent(ArticleActivity.this.getBaseContext(), ArticleActivity.class);
intent.putExtra("catIntext",hnCatIndex);
intent.putExtra("artIndex",hnArtIndex);
startActivity(intent);
ArticleActivity.this.overridePendingTransition(
R.anim.slide_in_right,
R.anim.slide_out_left
);
// right to left swipe
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if (hnArtIndex==1) {
Intent intent = new Intent(ArticleActivity.this.getBaseContext(), HNappActivity.class);
startActivity(intent);
}
else {
hnArtIndex--;
Intent intent = new Intent(ArticleActivity.this.getBaseContext(), ArticleActivity.class);
intent.putExtra("catIntext",hnCatIndex);
intent.putExtra("artIndex",hnArtIndex);
startActivity(intent);
}
ArticleActivity.this.overridePendingTransition(
R.anim.slide_in_left,
R.anim.slide_out_right
);
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
}