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