2

私は地元の新聞用の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;
            }
}   

}

4

2 に答える 2

1

別の方法として、ViewPagerhttp : //developer.android.com/reference/android/support/v4/view/ViewPager.htmlを使用することもできます。

ガイドは次のとおりです: http: //android-developers.blogspot.se/2011/08/horizo​​ntal-view-swiping-with-viewpager.html

于 2012-08-02T10:59:09.927 に答える
1

コードを読んでもいませんでした。問題は、アクティビティ間をスワイプしようとしていることです。同じアクティビティ内のすべてのフラグメントであるフラグメント間をスワイプしようとする必要があります。

参照: http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html http://developer.android.com/reference/android/support/v4/view/ViewPager.html

編集:

    private WebView hnWebView;
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.webViewFragment, null);
        hnWebView=(WebView)v.findViewById(R.id.webview);
        return v;
    }
于 2012-08-02T10:54:12.280 に答える