【问题标题】:Android: making offscreen bitmap visible when movedAndroid:移动时使屏幕外位图可见
【发布时间】:2016-07-08 13:43:33
【问题描述】:

我需要以两个圆形位图在中心开始活动,它应该立即动画并稍微向一侧移动,这样一个位图的一部分就在屏幕外并且不可见。稍后,当用户离开 Activity 时,它应该以相同的方式但向后(从一侧移动到中心)进行动画处理。

所以我已经实现了一个在它们的主要位置(侧面)绘制这些位图的类,而我现在遇到的问题是,当我为它们设置动画时,位图的屏幕外部分永远不会显示,所以在我的屏幕上,我看到了一个丑陋的移动位图,缺少一块。

位图是这样绘制的:

public class MyImageView extends ImageView {

    private Canvas offscreen;

    private static Bitmap pattern;
    private static Bitmap logo;

    private static int screenWidth, screenHeight; //The real size of the screen
    private static int patternDiameter, logoDiameter; //bitmaps' dimensions, both images are circles 

    private static float topPatternMargin, leftPatternMargin;
    private static float topLogoMargin, leftLogoMargin;

    public MyImageView (Context context, AttributeSet attrs) {
        super(context, attrs);

        screenWidth = getSize(context)[0];
        screenHeight = getSize(context)[1];

        patternDiameter = (int)(screenWidth * (1005.0/1280.0));
        logoDiameter = (int)(patternDiameter * (230.0/502.5));

        pattern = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_pattern);
        pattern = Bitmap.createScaledBitmap(pattern, patternDiameter, patternDiameter, false);
        logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_logo);
        logo = Bitmap.createScaledBitmap(logo, logoDiameter, logoDiameter, false);

        leftPatternMargin = (float) ((screenWidth) * (430.0/1280.0) - (patternDiameter/2.0));
        topPatternMargin = (float) ((screenHeight - patternDiameter)/2.0);
        leftLogoMargin = (float) (leftPatternMargin + patternDiameter/2.0 - logoDiameter/2.0);
        topLogoMargin = (float)(topPatternMargin + patternDiameter/2.0 - logoDiameter/2.0);

        offscreen = new Canvas(pattern);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        if(canvas==offscreen)
            super.onDraw(offscreen);

        else {

            super.draw(offscreen);

            canvas.drawBitmap(pattern, leftPatternMargin, topPatternMargin, null);
            canvas.drawBitmap(logo, leftLogoMargin, topLogoMargin, null);

        }

    }
}

所以我的问题是我将如何更改此代码(或其他代码),以便当我移动此类的一个实例时,它的所有部分对用户都是可见的?

【问题讨论】:

    标签: java android android-animation android-bitmap


    【解决方案1】:

    我在这里找到了答案:

    When drawing outside the view clip bounds with Android: how do I prevent underling views from drawing on top of my custom view?

    解决方法是在布局中加入这一行:

    android:clipChildren="false"
    

    【讨论】:

    • 是的,我是那个答案的作者。如果您正在为动画执行此操作,请不要在布局上设置它。在动画开始之前设置它,在动画结束时删除它。 (按代码)
    • PS:另一种方法是使用 ViewOverlay 并在动画的叠加层中移动您的视图(临时),并在完成后移回容器中。这对于动画更改父容器的视图特别有意义。如果您确实使用了最顶层父视图的 ViewOverlay,它允许您在不剪辑的情况下显示动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多