我正在制作片段过渡动画。我想从骑行动画中提供一个幻灯片,但我找不到它以编程方式访问android.R.anim
那里只有几个动画,在探索源代码时我发现这个文件夹frameworks/base/core/res/res/anim
有几十个动画,包括slide_in_right.xml
如何从代码中访问它?有没有比在我的res/anim
文件夹中复制/粘贴更好的方法?
这不是问题的答案。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;
}
};
}
您可以使用下面的代码获取预定义的动画 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);
这也有效
<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" />