4

我正在制作片段过渡动画。我想从骑行动画中提供一个幻灯片,但我找不到它以编程方式访问android.R.anim
那里只有几个动画,在探索源代码时我发现这个文件夹frameworks/base/core/res/res/anim有几十个动画,包括slide_in_right.xml

如何从代码中访问它?有没有比在我的res/anim文件夹中复制/粘贴更好的方法?

4

3 回答 3

3

这不是问题的答案。android.R.anim.slide_out_right 在别处定义,可从 R.anim 访问。无法从此包访问 Slide_in_right,因此需要使用 xml 文件定义

我设法通过将 frameworks/base/core/res/res/anim/slide_in_right.xml 中的文件复制到 res/anim/slide_in_right.xml 来访问动画并使用了代码:

AnimationUtils.loadAnimation(this, R.anim.slide_in_right);

加载动画。

实现 onTouchListener 的完整代码允许用户向左滑动图像以查看下一个图像并向右滑动图像以查看上一个图像如下所示

    /**
 * @return
 */
protected OnTouchListener createOnTouch() {
    return new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            if ((event.getAction() == MotionEvent.ACTION_DOWN) || (event.getAction() == MotionEvent.ACTION_POINTER_DOWN)) {
                downX = (int) event.getX();
                Log.i("event.getX()", " downX " + downX);
                return true;
            } else if ((event.getAction() == MotionEvent.ACTION_UP) || (event.getAction() == MotionEvent.ACTION_POINTER_UP)) {
                upX = (int) event.getX();
                Log.i("event.getX()", " upX " + upX);
                Log.d("event.getX()", " upX-downX " + (upX - downX));
                Log.d("event.getX()", " downX-upX " + (downX - upX));
                if (upX - downX > 100) {
                    imageSwitcher1.setInAnimation(AnimationUtils.loadAnimation(ImageDisplayActivity.this, android.R.anim.slide_in_left));
                    imageSwitcher1.setOutAnimation(AnimationUtils.loadAnimation(ImageDisplayActivity.this, android.R.anim.slide_out_right));

                    int newPosition = selected - 1;
                    showDetails(newPosition, gallery.getChildAt(newPosition));
                    // ImageDisplayActivity.this.switchTitle(curIndex);
                } else if (downX - upX > 100) {
                    imageSwitcher1.setInAnimation(AnimationUtils.loadAnimation(ImageDisplayActivity.this, R.anim.slide_in_right));
                    imageSwitcher1.setOutAnimation(AnimationUtils.loadAnimation(ImageDisplayActivity.this, R.anim.slide_out_left));

                    int newPosition = selected + 1;
                    showDetails(newPosition, gallery.getChildAt(newPosition));

                } else {
                    return false;
                }
                return true;
            }
            return false;
        }
    };
}
于 2013-04-26T14:37:11.947 回答
0

您可以使用下面的代码获取预定义的动画 xml,

Animation animation;

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   animation = AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right);
于 2012-12-08T21:33:35.533 回答
0

这也有效

 <action
        android:id="@+id/action_fragment_main_to_favoriteFragment"
        app:destination="@id/favoriteFragment"
        app:enterAnim="@android:anim/fade_in"
        app:exitAnim="@android:anim/fade_out"
        app:popEnterAnim="@android:anim/slide_in_left"
        app:popExitAnim="@android:anim/slide_out_right" />
于 2020-04-17T08:16:52.423 回答