android - 动画 ActionBar 的图标

标签 android actionbarsherlock android-drawable

我有一个 ActionBar 图标(左边的主要图标,不是操作项),我想对其进行动画处理。

我在我的 Activity 中设置我的 ActionBar 的图标,如下所示:

getSupportActionBar().setIcon(icon)

其中 icon 是由将自定义 XML View 转换为位图的库生成的 Drawable。此 XML View 是一个 RelativeLayout,带有背景图像和顶部的 TextView

今天,当我必须更新 TextView 时,我只需重新生成 icon 并再次调用 setIcon 即可。相反,我想获取我的 TextView 并对其应用一些动画效果,例如淡出然后在更新后淡入(也许永远不必调用 setIcon,只需重复使用相同的代码即可)。

不知道该怎么做。有人可以推荐一种方法吗?

编辑:尝试这种方法:

MyActivity中:

Drawable myDrawable = new MyDrawable();
supportActionBar.setIcon(myDrawable);

和:

public class MyDrawable extends Drawable {
    private Paint paint;
    private RectF rect;

    public MyDrawable() {
        this.paint = new Paint();
        this.rect = new RectF();
    }

    @Override
    public void draw(Canvas canvas) {
        paint.setARGB(255, 0, 255, 0);
        paint.setStrokeWidth(2);
        paint.setStyle(Paint.Style.FILL);

        rect.right = 20f;
        rect.bottom = 20f;

        canvas.drawRoundRect(rect, 0.5f, 0.5f, paint);
    }

    @Override
    public void setAlpha(int alpha) {
        paint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        paint.setColorFilter(cf);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.OPAQUE;
    }
}

什么都没有显示。我验证了 onDraw 被调用了。我觉得可疑的是 canvas 的高度和宽度都设置为 1。

最佳答案

一个正确的方法是忘记 XML 布局并创建一个自定义的 Drawable

此自定义可绘制对象的实例将设置为 ActionBar 上的图标,并在必要时调用 invalidateSelf() 进行重绘(例如,由于动画)。

drawable 可以保存对其他 drawable 的引用(例如 BitmapDrawable 有来自 /res/ 文件夹的东西,或者 Color 或 Gradient drawable 用于背景阴影)并调用(例如) bgDraw.draw(canvas)onDraw 回调期间。

它还可以直接在 onDraw 回调期间提供给它的 Canvas 上绘制内容。使用 Canvas ,您可以直接在其上绘制圆、线、区域、路径和文本。

编辑:

非常简单的动画示例(没有检查代码,可能是错别字):

private long animationTime;
public void doAnimation(){
    animationTime = System.currentTimeMilis() + 3000; // 3 seconds
    invalidateSelf();
}

public void onDraw(Canvas canvas){
    // do your drawing.
    // You can use difference between
    // currentTimeMilis and animationTime for status/position
   ...

    // at the end
    if(animationTime > System.currentTimeMilis())
         invalidateSelf();
}

关于android - 动画 ActionBar 的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213356/

相关文章:

android - 绝对元素在纵向模式手机中没有响应

java - 操作栏 Sherlock 编译错误

android - 在菜单抽屉/滑动菜单中突出显示所选项目

Android按钮选择并按下drawable

android - picasso onBitmapLoaded 从未调用过

android - 为 ListView 中的每个元素设置 backgroundDrawable 时的 SIGSEGV

android - 错误 : No resource identifier found for attribute 'showsAsAction' in package 6

java - 通过第三方网关在 Android 上发送短信

java - 如何制作带有动画的自定义警报对话框包含表情符号

android - setBackgroundDrawable 无法正常工作