如何仅旋转文本后面的画布

时间:2016-05-13 13:10:21

标签: java android animation android-canvas rotateanimation

我有这个功能,可以从前面带有文本的资源绘图中为图像画布设置动画。

我只想旋转一个绿色的“星”,这样文字保持不变

enter image description here

这个想法是只旋转图像画布但不旋转文本。 我该怎么做?

此代码适用于Android Java

 private Bitmap writeTextOnDrawable(int drawableId, String text, ImageView imv_promo,boolean isAnim) {

    Bitmap bm = BitmapFactory.decodeResource(ctx.getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true);
    Typeface tf = Typeface.createFromAsset(ctx.getAssets(), "RobotoCondensed-Italic.ttf");

    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(ctx.getResources().getColor(R.color.white));
    paint.setTypeface(tf);
    paint.setTextAlign(Paint.Align.CENTER);
    paint.setTextSize(convertToPixels(mContext, 17));


    Rect textRect = new Rect();
    paint.getTextBounds(text, 0, text.length(), textRect);

    Canvas canvas = new Canvas(bm);

    //If the text is bigger than the canvas , reduce the font size
    if (textRect.width() >= (canvas.getWidth() - 4))     //the padding on either sides is considered as 4, so as to appropriately fit in the text
        paint.setTextSize(convertToPixels(mContext, 7));        //Scaling needs to be used for different dpi's

    //Calculate the positions
    int xPos = (canvas.getWidth() / 2) - 6;     //-2 is for regulating the x position offset

    int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2));

    canvas.save();
    canvas.rotate((float) 25, xPos, yPos);
    canvas.drawText(text, xPos, yPos, paint);
    canvas.restore();

    Animation animation;
    if(isAnim) {
        animation = new RotateAnimation(0, 360, canvas.getWidth() / 2, canvas.getHeight() / 2);
        animation.setRepeatMode(Animation.RESTART);
        animation.setRepeatCount(Animation.INFINITE);
        animation.setDuration(20000L);
        imv_promo.startAnimation(animation);
    }

    return bm;
}

0 个答案:

没有答案