带xml的Android自定义插值器
发布时间:2020-12-16 07:49:29 所属栏目:百科 来源:网络整理
导读:我尝试按照 android API GUIdes制作自定义插值器. 所以这就是插补器. ?xml version="1.0" encoding="utf-8"?customInterpolator xmlns:android="http://schemas.android.com/apk/res/android"android:factor="2"/ 但是当我尝试在动画中使用它时: ?xml versi
我尝试按照
android API GUIdes制作自定义插值器.
所以这就是插补器. <?xml version="1.0" encoding="utf-8"?> <customInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:factor="2" /> 但是当我尝试在动画中使用它时: <?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android"> android:fromXScale="1" android:toXScale="5" android:duration="3000" android:interpolator="@anim/custom_interpolator"/> </scale> 没有任何反应 – 视图只是刷新自己.这是为什么 ? <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1" android:toXScale="5" android:duration="3000" android:interpolator="@anim/custom_interpolator"/> </set> 使用此代码: AnimationSet animation = (AnimationSet)AnimationUtils.loadAnimation(AnimationActivity.this,R.anim.animation); animationView.startAnimation(animation); 抛出异常: java.lang.RuntimeException: Unknown interpolator name: customInterpolator at android.view.animation.AnimationUtils.createInterpolatorFromXml(AnimationUtils.java:422) at android.view.animation.AnimationUtils.loadInterpolator(AnimationUtils.java:285) at android.view.animation.Animation.setInterpolator(Animation.java:391) at android.view.animation.Animation.<init>(Animation.java:255) at android.view.animation.ScaleAnimation.<init>(ScaleAnimation.java:63) at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:119) at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:115) at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:92) at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:73) at com.example.someone.studyproject.AnimationActivity$4.onClick(AnimationActivity.java:61) at android.view.View.performClick(View.java:4633) at android.view.View$PerformClick.run(View.java:19330) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(Native Method) 这很奇怪,我从来没有用xml创建我的自定义插补器(我想在xml中只是为了练习它). 现在我尝试: <scale android:fromXScale="1" android:toXScale="5" android:pivotX="50%" android:pivotY="50%" android:duration="3000"/> 这不起作用 – 图片消失,5秒后它又回来了.这是为什么 ?为什么图片消失而不是调整大小?
看看它正在抛出的错误. “customInterpolator”不是实际的插值器.你刚刚从零创建了那个标签.如果要修改它们,则必须使用内置的android插补器类.例如:
customInterpolator.xml <accelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:factor="2" /> 对于Android中可用的不同类型的插补器,请查看this link. 如果您不想使用现有的android插补器之一,则可以以编程方式创建自己的内插器. CubicAccelerateDecelerateInterpolator.java public class CubicAccelerateDecelerateInterpolator implements Interpolator { @Override public float getInterpolation(float t) { float x = t * 2.0f; if (t < 0.5f) { return 0.5f * x * x * x; } x = (t - 0.5f) * 2 - 1; return 0.5f * x * x * x + 1; } } 如您所见,您需要创建一个函数,该函数返回0到1之间插值的时间t. i = f(t) 注意:如果以这种方式执行此操作,则无法在XML中引用此插补器.你必须以编程方式创建动画. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |