7

Điều khá đơn giản mà tôi đang thực hiện, tôi đã thực hiện nó trước nhưng hiện tại nó không hoạt động như tôi mong đợi. Anyways Hãy để tôi giải thích ngắn gọn những gì tôi đang cố gắng làm và những gì tôi đang nhận ::onTouch mang lại những điểm tiếp xúc kỳ lạ Android

Kịch bản :: Tôi có một RelativeLayout trong đó một ImageView được đặt, Bây giờ tôi đặt touchlistener như thế này: imageview.setOnTouchListener(this);

Nó hỏi tôi phải ghi đè lên các chức năng onTouch(View v,MotionEvent event) mà tôi đã làm ... và trong Action_Move tôi nhận được xy và thêm chúng vào trái và lề hàng đầu, bằng cách này tôi đang di chuyển hình ảnh của tôi.

Vấn đề Weird: My ImageView là di chuyển, nhưng với một cái lắc rất đáng chú ý, như thế nào nếu tôi đang di chuyển theo hướng đúng, ImageView sẽ đi đến phía bên phải nhưng trên đường nó trở lại với bên trái để nó trông như hình ảnh không ổn định, nó rung động .. một cái gì đó như thế .. Tôi đang cho xy mà tôi nhận được trong thời gian log ... hy vọng điều này sẽ mang lại cho bạn ý tưởng.

ACTION_DOWN[#0(pid 0)=160,233] Going right.. 
ACTION_MOVE[#0(pid 0)=160,233] //// 
ACTION_MOVE[#0(pid 0)=160,233] // 
ACTION_MOVE[#0(pid 0)=174,231] // 
ACTION_MOVE[#0(pid 0)=176,233] // 
ACTION_MOVE[#0(pid 0)=196,232] // 
ACTION_MOVE[#0(pid 0)=152,232] // suddenly i got 152 as location for x... image comes  back 
ACTION_MOVE[#0(pid 0)=167,232] // again started to go right 
ACTION_MOVE[#0(pid 0)=180,233] // going right 
ACTION_MOVE[#0(pid 0)=173,233] // again comes a little back 
ACTION_MOVE[#0(pid 0)=187,232] // same thing goes till end.. 
ACTION_MOVE[#0(pid 0)=159,232] 
ACTION_MOVE[#0(pid 0)=174,231] 
ACTION_MOVE[#0(pid 0)=177,233] 
ACTION_MOVE[#0(pid 0)=189,231] 
ACTION_MOVE[#0(pid 0)=155,232] 
ACTION_MOVE[#0(pid 0)=171,231] 
ACTION_MOVE[#0(pid 0)=183,230] 
ACTION_MOVE[#0(pid 0)=161,234] 
ACTION_MOVE[#0(pid 0)=171,233] 
ACTION_MOVE[#0(pid 0)=174,230] 
ACTION_MOVE[#0(pid 0)=183,230] 
ACTION_MOVE[#0(pid 0)=162,234] 
ACTION_MOVE[#0(pid 0)=170,233] 
ACTION_MOVE[#0(pid 0)=176,233] 
ACTION_MOVE[#0(pid 0)=165,233] 
ACTION_MOVE[#0(pid 0)=175,232] 
ACTION_MOVE[#0(pid 0)=163,233] 
ACTION_MOVE[#0(pid 0)=171,233] 
ACTION_MOVE[#0(pid 0)=167,233] 
ACTION_MOVE[#0(pid 0)=172,232] 
ACTION_MOVE[#0(pid 0)=178,232] 
ACTION_MOVE[#0(pid 0)=158,234] 
ACTION_MOVE[#0(pid 0)=170,234] 
ACTION_MOVE[#0(pid 0)=170,232] 
ACTION_MOVE[#0(pid 0)=177,231] 
ACTION_MOVE[#0(pid 0)=157,234] 
ACTION_MOVE[#0(pid 0)=160,234] 
ACTION_MOVE[#0(pid 0)=169,232] 
ACTION_MOVE[#0(pid 0)=165,233] 
ACTION_MOVE[#0(pid 0)=167,233] 
ACTION_MOVE[#0(pid 0)=159,233] 
ACTION_UP [#0(pid 0)=161,233] 

mã XML cho RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#99000000"> 

    <ImageView 
     android:id="@+id/imageview" 
     android:layout_width="400dp" 
     android:layout_height="400dp" 
     android:layout_marginLeft="100dp" 
     android:layout_marginTop="100dp" 
     android:scaleType="matrix" /> 
</RelativeLayout> 

Vì vậy, đây là tối đa, tôi có thể giải thích câu hỏi của tôi, vẫn còn nếu bạn cần bất cứ điều gì, cho tôi biết.

Cập nhật :: Mã cho di chuyển ImageView trong tức là container của nó RelativeLayout:

case MotionEvent.ACTION_MOVE: 
      LayoutParams params = (LayoutParams) imageview.getLayoutParams(); 

      params.leftMargin = params.leftMargin + x; 
      params.topMargin = params.topMargin + y; 

      imageview.setLayoutParams(params); 
      break; 

Trả lời

5

The X và biến Y trong onTouch là X và Y tương đối so với Xem trong đó có các onTouchListener đính kèm. 10, 10 sẽ là từ trên cùng bên trái của ImageView không phải của số RelativeLayout.

Nếu bạn sử dụng các giá trị này để di chuyển ImageView thì bạn sẽ tự nhiên có hành vi run rẩy, mỗi hành động di chuyển cũng sẽ kích hoạt một OnTouchEvent hơi khác gây ra hành động di chuyển khác - đệ quy này cho bạn hiệu ứng "rung".

+0

"mỗi hành động di chuyển cũng sẽ kích hoạt một OnTouchEvent hơi khác nhau gây ra một hành động di chuyển khác - lần đệ quy này cho bạn hiệu ứng" rung "." Xin giải thích nó một chút, một liên kết/tài liệu sẽ rất hữu ích, nơi nó đã được viết chi tiết ... – Farhan

0

Khi tôi nhận được sự phối hợp Y theo phương pháp event.getRawY() thay vì event.getY() để di chuyển Chế độ xem, hành vi run biến mất. Vì vậy, nếu bạn đã sử dụng phương pháp getY(), hãy thử thay đổi nó.

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