【问题标题】:TranslateAnimation not moving Image to the right coordinateTranslateAnimation 不将图像移动到正确的坐标
【发布时间】:2015-11-05 09:02:04
【问题描述】:

由于某种原因,我的TranslateAnimation 没有将 2 个ImageView 移动到正确的位置。老实说,我不知道为什么ImageView 会从屏幕上消失!!我定义 minY, maxY, minX, maxX 允许我在这些常量之间生成坐标

我检查了我生成的X and Y 坐标在屏幕maxYmaxX 内。但是 imageview 不断从屏幕上移开!

我的屏幕maxY = 2500maxX = 1599。我正在使用 三星 Galaxy Tab S

生成随机 x + y 代码:

private static int[] generateRandomX(){
        int[] numbers = new int[2];
        int R;

        int Low = 0;
        int High = 800;

        for(int i=0;i<numbers.length;i++) {
            Random r = new Random();
            R = r.nextInt(High - Low) + Low;
            numbers[i] = R;
//            Log.d("X pos -->", "X = "+numbers[i]);

        }


        return numbers;
    }

    private static int[] generateRandomY(){
        int[] numbers = new int[2];
        int R;

        int Low = 1000;
        int High = 2000;

        for(int i=0;i<numbers.length;i++) {
            Random r = new Random();
            R = r.nextInt(High - Low) + Low;
            numbers[i] = R;
//            Log.d("Y pos -->", "Y = "+numbers[i]);
        }


        return numbers;
    }

这里是我将 x 和 y 分配给 TranslateAnimation 的地方

这段代码负责将ImageView0X, toX, 0Y, toY移动

 public static void swipedDiceInThisDirection(float n1, float n2, float n3, float n4){

        //Die1
        moveDie1 = new TranslateAnimation(0, n1, 0, n2);  //  new TranslateAnimation(xFrom,xTo, yFrom,yTo)
        moveDie1.setDuration(2000);  // animation duration

        //Die2
        moveDie2 = new TranslateAnimation(0, n3, 0, n4);
        moveDie2.setDuration(2000);

        moveDie1.setFillAfter(true);
        moveDie2.setFillAfter(true);
        moveDie1.setFillEnabled(true);
        moveDie2.setFillEnabled(true);

        animationListeners(); //Animation listeners
        determineDiceClicked();

    }

【问题讨论】:

    标签: java android android-animation coordinate-systems


    【解决方案1】:

    默认情况下,平移动画不采用绝对值,而是采用要应用的更改量(增量)。因此,如果您的视图位于 x=1000 并且随机数达到 800 的上限,它将移动到 1800,这对您来说将不在屏幕上。因此,为了超过 800,您需要考虑您的视图当前的位置以及将其移动到新位置的变化量:

    moveDie1 = new TranslateAnimation(0, n1-moveDie1.getX(), 0, n2-moveDie1.getY());
    

    变成 800-1000,因此 -200 的变化将视图移动到 x=800,就像您想要的那样。

    或者只是使用一个不同的translationanimation构造函数来接受动画类型,这样你就可以使用绝对值。

    public TranslateAnimation (int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

    moveDie1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.ABSOLUTE, n1, Animation.ABSOLUTE, n2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多