1

我对 Android 中的动画有疑问。我制作了一个包含很多产品的应用程序,您现在可以通过从左到右滑动屏幕来切换产品(转到列表中的下一个产品)但是它现在就像任何其他活动一样加载。

我想要的是许多其他应用程序也有的东西,滑动需要使旧的活动从屏幕左移出,而新的活动同时进入。

我已经搜索和阅读了很多,但我真的不知道从哪里开始。

我的产品是活动,这是它们现在切换的方式:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
     try {
         if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
             return false;
         // left to right swipe
         if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
             for(HashMap h: products) {
                 if (h.get("id").toString().equals(id)) {
                     int index = products.indexOf(h)-1;

                     if (index != -1) {
                        HashMap product = products.get(index);

                        dialog = ProgressDialog.show(ProductActivity.this, "", 
                                 "Laden...", true);
                        Intent i = new Intent(ProductActivity.this, ProductActivity.class);
                        i.putExtra("id", product.get("id").toString());
                        i.putExtra("profileId", profileId);
                        i.putExtra("score", product.get("score").toString());
                        i.putExtra("products", products);
                        startActivity(i);
                    }
                     else {
                         Toast.makeText(ProductActivity.this, "Dit is het eerste product in de lijst.", Toast.LENGTH_LONG).show();
                     }
                 }
             }
         }
         //right to left swipe
         else if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
             for(HashMap h: products) {
                 if (h.get("id").toString().equals(id)) {
                     int index = products.indexOf(h)+1;

                     if (index != products.size()) {
                        HashMap product = products.get(index);

                        dialog = ProgressDialog.show(ProductActivity.this, "", 
                                 "Laden...", true);
                        Intent i = new Intent(ProductActivity.this, ProductActivity.class);
                        i.putExtra("id", product.get("id").toString());
                        i.putExtra("profileId", profileId);
                        i.putExtra("score", product.get("score").toString());
                        i.putExtra("products", products);
                        startActivity(i);
                    }
                     else {
                         Toast.makeText(ProductActivity.this, "Dit is het laatste product in de lijst.", Toast.LENGTH_LONG).show();
                     }
                 }
             }
         }
     } catch (Exception e) {
         // nothing
     }
     return false;
}
4

2 回答 2

2

你可以试试这个Android-Viewflow 库

ViewFlow 是一个 Android UI 小部件,它提供了一个可水平滚动的 ViewGroup,其中包含从适配器填充的项目。

带有圆形指示器的视图流 带有标题指示器的视图流

于 2012-06-28T12:23:57.783 回答
2

使用overridePendingTransition您可以覆盖活动的下一个动画。覆盖活动的 startActivity 和完成方法,并在那里调用 overridePendingTransition。

您可以将使用的动画指定为 anim 文件夹中的 xml 文件。

对于滑入式动画,请使用以下内容:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:fromXDelta="-100%"
    android:toXDelta="0"
    android:fromYDelta="0"
    android:toYDelta="0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_longAnimTime" />
</set>

对于滑出动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:fromXDelta="0"
    android:toXDelta="100%"
    android:fromYDelta="0"
    android:toYDelta="0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_longAnimTime" />
</set>

根据 fromXDelta 和 toXDelta 中使用的值,您可以确定它应该滑动的方向。

于 2012-06-28T12:25:50.847 回答