我有很多的文字信息以不同的角度得出從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