我有很多的文字信息以不同的角度得出从View
延伸的自定义视图,我想一个特定的字符串其阿尔法值一度降低到一定的水平,前,后开始。任何建议或片段,将不胜感激:)简单的淡出动画画布上线,Android的
postInvalidateDelayed(...)
似乎并没有完成这个任务的工作。
我有很多的文字信息以不同的角度得出从View
延伸的自定义视图,我想一个特定的字符串其阿尔法值一度降低到一定的水平,前,后开始。任何建议或片段,将不胜感激:)简单的淡出动画画布上线,Android的
postInvalidateDelayed(...)
似乎并没有完成这个任务的工作。
有在垂直文本边界的正确测量错误被褪色。这是我的onDraw
方法
Paint myPaint = new Paint();
myPaint.setColor(Color.parseColor("#" + colorAlpha + "3AA6D0"));// initially colorAlpha is ff
Rect r = new Rect();
char[] a = "Hello World".toCharArray();
datePaint.getTextBounds(a, 0, a.length, r);// get the bound of the text, I was not calculating this correctly
canvas.drawText("Hello World", 0, 0, myPaint);// draw the text
int colorValue = Integer.parseInt(colorAlpha, 16);
colorValue -= 20;// decrease alpha value for next call to onDraw method by postInvalidateDelayed
if (colorValue > 40) {
colorAlpha = Integer.toHexString(colorValue);
// this will create the effect of fade out animation
// because each call to onDraw method is at the difference of 50 millisecond delay
// and in each call we are decreasing alpha value by 20.
postInvalidateDelayed(50, r.left, r.top, r.right, r.bottom);
}
一种可能性是创建两个观点,一个FrameLayout
相互重叠的内部。一个视图将包含所有静态字符串,另一个视图将包含您想要设置动画的字符串。然后,向动画视图添加一个alpha动画会很简单。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<package.MyNonAnimatedView
android:id="@+id/nonAnimatedView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<package.MyAnimatedView
android:id="@+id/animatedView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
而且你会附加到动画视图动画:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="100" />
从活动的onCreate(Bundle)
方法中,你可以调用AnimationUtils.loadAnimation(Context, int)
从XML资源加载动画,并将其连接到动画视图(只要你给它一个ID)。
尼斯:)但是这两个视图是相关的,我必须通过使用接口等来将它们分开,只是为了使用这种方法的简单动画。 – 2012-02-18 07:28:16
嗯......如果两个视图在创建字符串的方式上足够相似,那么您可能只需在上面的xml代码中实例化相同的视图两次。通过活动在两个视图(如果需要)之间进行交互很容易。最简单的方法是将视图代码与动画代码完全分开,但如上所述为视图制作动画会使整个视图动画化,而不仅仅是视图的一部分。 – happydude 2012-02-18 07:49:01
您可以将Handler
添加到您的活动,可以在指定的时间间隔发送messages。当您的活动从处理程序接收回调时,它可以通知视图更新要更改的部分。
一个例子:
public class myActivity extends Activity implements Handler.Callback {
int mDelay = 100; // Update interval (milliseconds).
Handler mHandler = new Handler(this);
private Runnable mEvent = new Runnable() {
@Override
public void run() {
mHandler.postDelayed(mEvent, mDelay);
Message message = mHandler.obtainMessage();
// Add arguments to message, if required.
mHandler.sendMessage(message);
}
};
@Override
public boolean handleMessage(Message message) {
// Your view update code.
}
private void start() {
mHandler.postDelayed(mEvent, mDelay);
}
private void stop() {
mHandler.removeCallbacks(mEvent);
}
}
调用start()
启动处理程序,stop()
停止。确定何时停止处理程序可能会在handleMessage(Message)
代码中。
这种方法也可以使用,但我不知何故得到'postInvalidateDelayed(...)'方法的工作。垂直文本范围的正确测量出现错误。 – 2012-02-18 14:19:21
我建议发布你的工作解决方案,然后接受它作为答案。 – happydude 2012-02-18 16:42:35
您定位的是哪个Android版本? Honeycomb和up有一个动画框架,您可以使用它来完成此操作。 – MJD 2012-02-18 07:02:07
uses-sdk android:minSdkVersion =“10”,目标是2.3.3。我知道这个框架,但我下面一步:P。 – 2012-02-18 07:18:32
'postInvalidateDelayed(...)'正在工作。正确测量文本边界被淡化时出错。 – 2012-02-18 14:16:06