ฉันต้องการหยุดแอนิเมชั่นแปลที่กำลังรันอยู่ .cancel()
วิธีการAnimation
ไม่มีผล; อนิเมชั่นดำเนินต่อไปจนจบ
คุณจะยกเลิกภาพเคลื่อนไหวที่ทำงานอยู่ได้อย่างไร
ฉันต้องการหยุดแอนิเมชั่นแปลที่กำลังรันอยู่ .cancel()
วิธีการAnimation
ไม่มีผล; อนิเมชั่นดำเนินต่อไปจนจบ
คุณจะยกเลิกภาพเคลื่อนไหวที่ทำงานอยู่ได้อย่างไร
คำตอบ:
โทรclearAnimation()
ใดที่คุณเรียกว่าView
startAnimation()
setFillAfter()
อาจไม่ทำในสิ่งที่คุณคิด เมื่อเหตุการณ์การสัมผัสเกิดขึ้นให้ล้างภาพเคลื่อนไหวแล้วปรับเค้าโครงของคุณเพื่อให้มีผลกับการเปลี่ยนแปลงถาวรที่คุณต้องการ
ใน Android 4.4.4 ดูเหมือนว่าวิธีเดียวที่ฉันจะหยุดการเคลื่อนไหวของ alpha fading บน View ได้คือการโทรView.animate().cancel()
(เช่นการเรียก.cancel()
ใช้วิวViewPropertyAnimator
)
นี่คือรหัสที่ฉันใช้เพื่อความเข้ากันได้ก่อนและหลัง ICS:
public void stopAnimation(View v) {
v.clearAnimation();
if (canCancelAnimation()) {
v.animate().cancel();
}
}
... ด้วยวิธีการ:
/**
* Returns true if the API level supports canceling existing animations via the
* ViewPropertyAnimator, and false if it does not
* @return true if the API level supports canceling existing animations via the
* ViewPropertyAnimator, and false if it does not
*/
public static boolean canCancelAnimation() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}
นี่คือภาพเคลื่อนไหวที่ฉันหยุด:
v.setAlpha(0f);
v.setVisibility(View.VISIBLE);
// Animate the content view to 100% opacity, and clear any animation listener set on the view.
v.animate()
.alpha(1f)
.setDuration(animationDuration)
.setListener(null);
.setListener(null);
สิ่งนี้ช่วยฉัน
v.setAnimationListener(null)
หากคุณกำลังใช้ฟังเคลื่อนไหวตั้ง ใช้รหัสต่อไปนี้พร้อมตัวเลือกทั้งหมด
v.getAnimation().cancel();
v.clearAnimation();
animation.setAnimationListener(null);
v.setAnimation(null);
v.clearAnimation();
คุณต้องใช้. clearAnimation (); วิธีการในเธรด UI:
runOnUiThread(new Runnable() {
@Override
public void run() {
v.clearAnimation();
}
});
สิ่งที่คุณสามารถทำได้คือรับเมทริกซ์การแปลงจากภาพเคลื่อนไหวก่อนที่คุณจะหยุดมันและตรวจสอบเนื้อหาเมทริกซ์เพื่อรับค่าตำแหน่งที่คุณกำลังมองหา
นี่คือสิ่งที่คุณควรพิจารณา
public boolean getTransformation (long currentTime, Transformation outTransformation)
public void getValues (float[] values)
ตัวอย่างเช่น (บางรหัสเทียมฉันไม่ได้ทดสอบสิ่งนี้):
Transformation outTransformation = new Transformation();
myAnimation.getTransformation(currentTime, outTransformation);
Matrix transformationMatrix = outTransformation.getMatrix();
float[] matrixValues = new float[9];
transformationMatrix.getValues(matrixValues);
float transX = matrixValues[Matrix.MTRANS_X];
float transY = matrixValues[Matrix.MTRANS_Y];
ใช้เมธอดsetAnimation (null)เพื่อหยุดการเคลื่อนไหวซึ่งเป็นวิธีสาธารณะใน
View.javaซึ่งเป็นคลาสพื้นฐานสำหรับวิดเจ็ตทั้งหมดซึ่งใช้เพื่อสร้างส่วนประกอบ UI แบบโต้ตอบ (ปุ่มฟิลด์ข้อความและอื่น ๆ )
/**
* Sets the next animation to play for this view.
* If you want the animation to play immediately, use
* {@link #startAnimation(android.view.animation.Animation)} instead.
* This method provides allows fine-grained
* control over the start time and invalidation, but you
* must make sure that 1) the animation has a start time set, and
* 2) the view's parent (which controls animations on its children)
* will be invalidated when the animation is supposed to
* start.
*
* @param animation The next animation, or null.
*/
public void setAnimation(Animation animation)
หากต้องการหยุดแอนิเมชันคุณสามารถตั้งค่า objectAnimator ที่ไม่ทำอะไรเช่น
ก่อนอื่นเมื่อการพลิกด้วยตนเองมีภาพเคลื่อนไหวจากซ้ายไปขวา:
flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);
จากนั้นเมื่อเปลี่ยนเป็นการพลิกอัตโนมัติไม่มีภาพเคลื่อนไหว
flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);
doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);