2012-06-16 18 views
5

Tôi biết nhiều cách để nhận giá trị vị trí của Chế độ xem.Android: Có cách nào để có được vị trí mới nhất của Chế độ xem sau khi TranslateAnimation không?

getLocationOnScreen() 
getLocationInWindow() 
getLeft() 

Tuy nhiên, không ai trong số họ thực sự trả về vị trí hiện tại của chế độ xem tôi di chuyển bằng phương thức startAnimation(), nhưng chỉ vị trí ban đầu. Vì vậy, bây giờ chúng ta hãy tạo một View để di chuyển sang bên phải 10 pixel trên mỗi Click (tôi bỏ qua layout, vì bạn chỉ có thể đặt bất cứ khung nhìn nào trong XML chính của bạn và đưa nó lênClickClickener).

public class AndroidTestActivity extends Activity implements OnClickListener { 
LinearLayout testView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    testView = (LinearLayout) this.findViewById(R.id.test); 
    testView.setOnClickListener(this); 
} 

public void onClick(View v) { 
    int[] pLoS = new int[2]; 
    testView.getLocationOnScreen(pLoS); 
    TranslateAnimation move = new TranslateAnimation(pLoS[0], pLoS[0] + 10, 0f, 0f); 
    move.setFillAfter(true); 
    move.setFillEnabled(true); 
    testView.startAnimation(move); 
} 

} 

Như bạn thấy, điều này không làm việc như tôi mong đợi, kể từ getLocationOnScreen() luôn trả về giá trị như nhau (trong trường hợp của tôi, 0), và doen't phản ánh giá trị tôi được sử dụng trong TranslateAnimation .. .

Bất kỳ ý tưởng nào?

Trả lời

2

Giả sử bạn đang sử dụng Android < 3.0 thì câu hỏi của bạn có thể ở dạng tĩnh mạch tương tự như tôi đã hỏi here. Về cơ bản, các hoạt ảnh riêng biệt với Chế độ xem, tức là Android sẽ tạo bản sao Chế độ xem của bạn. Đó là lý do tại sao getLocationOnScreen() luôn trả về 0. Đây không phải là chế độ xem đã di chuyển (hoạt ảnh) đó là bản sao được di chuyển (hoạt ảnh). Nếu bạn thấy câu trả lời cho câu hỏi của tôi, vấn đề này đã được giải quyết trong các phiên bản sau của Android.

+0

Cảm ơn một nhóm. – Quv

0

hoạt ảnh trên bánh gừng Android và dưới đây không thực sự thay đổi chế độ xem theo bất kỳ cách nào, chỉ thay đổi cách hiển thị.

cách duy nhất để có được vị trí mới là tính toán nó.

+0

Cảm ơn. Tôi sẽ sử dụng một mảng và tự tính toán nó ... – Quv

2

Vâng, nếu bạn đang cố gắng xem có bao nhiêu điểm ảnh mà chế độ xem đã di chuyển trong/sau hoạt ảnh của nó, thì bạn có thể mở đối tượng Chuyển đổi trên hoạt ảnh.

Dưới đây là một ví dụ sử dụng AnimationListener:

animation.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      Transformation trans = new Transformation(); 
      // startTime + duration = end of animation 
      int endTime = animation.getStartTime()+animation.getDuration(); 
      animation.getTransformation(endTime, trans); 

      Matrix transformationMatrix = trans.getMatrix(); 
      float[] matrixVals = new float[9]; 
      transformationMatrix.getValues(matrixVals); 
      float xTraveled = matrixVals[2]; 
      float yTraveled = matrixVals[5]; 
      // do something with them here... 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 
    }); 

tôi không thể được chính xác đúng trong các chỉ số mảng cho các, chắc chắn sử dụng Matrix.toString() và nhìn vào giá trị bản thân. xTraveled và yTraveled sẽ cung cấp cho bạn khoảng cách được dịch bởi TranslateAnimation vào thời gian đã chỉ định (trong trường hợp này, ở cuối hoạt ảnh).

Các vấn đề liên quan