3

我有很多的文字信息以不同的角度得出從View延伸的自定義視圖,我想一個特定的字符串其阿爾法值一度降低到一定的水平,前,後開始。任何建議或片段,將不勝感激:)簡單的淡出動畫畫布上線,Android的

postInvalidateDelayed(...)似乎並沒有完成這個任務的工作。

+0

您定位的是哪個Android版本? Honeycomb和up有一個動畫框架,您可以使用它來完成此操作。 – MJD 2012-02-18 07:02:07

+0

uses-sdk android:minSdkVersion =「10」,目標是2.3.3。我知道這個框架,但我下面一步:P。 – 2012-02-18 07:18:32

+0

'postInvalidateDelayed(...)'正在工作。正確測量文本邊界被淡化時出錯。 – 2012-02-18 14:16:06

回答

0

有在垂直文本邊界的正確測量錯誤被褪色。這是我的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); 
} 
1

一種可能性是創建兩個觀點,一個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)。

+0

尼斯:)但是這兩個視圖是相關的,我必須通過使用接口等來將它們分開,只是爲了使用這種方法的簡單動畫。 – 2012-02-18 07:28:16

+0

嗯......如果兩個視圖在創建字符串的方式上足夠相似,那麼您可能只需在上面的xml代碼中實例化相同的視圖兩次。通過活動在兩個視圖(如果需要)之間進行交互很容易。最簡單的方法是將視圖代碼與動畫代碼完全分開,但如上所述爲視圖製作動畫會使整個視圖動畫化,而不僅僅是視圖的一部分。 – happydude 2012-02-18 07:49:01

1

您可以將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)代碼中。

+0

這種方法也可以使用,但我不知何故得到'postInvalidateDelayed(...)'方法的工作。垂直文本範圍的正確測量出現錯誤。 – 2012-02-18 14:19:21

+0

我建議發佈你的工作解決方案,然後接受它作爲答案。 – happydude 2012-02-18 16:42:35