2012-12-12 2 views
0

터치로 설명 된 위치에 Android 애플리케이션의 버튼을 어떻게 추가합니까?터치로 설명 된 위치에서 Android 애플리케이션에 버튼을 어떻게 추가합니까?

내가 빈 활동을하고 터치 리스너를 사용하여 터치하면 x, y 좌표를 얻을 수 있다고 상상해보십시오. 터치 할 때 위치 (x, y)에 버튼을 삽입하려면 동적으로 터치했습니다. 어떻게해야합니까?

+0

시도해 본 내용이 있습니까? –

답변

0

레이아웃에 많은 위젯이 있습니다. 그래서 나는 처음에 그것들을 모두 보이지 않게하고 터치하여 새로운 x, y 좌표를 지정했습니다. 터치하고 터치의 x, y 좌표에 "Object Animator"을 사용하여 위젯을 이동합니다 (예 : 버튼).

-1

활동의 일부 레이어에서 fill_parent 너비와 높이를 갖는 상대 레이아웃이 필요합니다. 누군가가 화면을 클릭하면 포인트를 얻고 ontouchlistener를 가져와 상대 레이아웃에 해당 x와 y로 새로운 이미지 뷰를 만들지 만 상대 레이아웃은 전체 활동 화면에 중첩되어 정확한 x와 y를가집니다. 장치 화면.

내가 정확히 특정 위치에 버튼을 만들 수 있는지 여부를 잘 모릅니다 ontouchlistener

img.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       event.getX()  //cordinates wrt view 
       event.getRawX() //abs cordinates on screen 
           event.getY()  //cordinates wrt view 
       event.getRawY() //abs cordinates on screen 
       return false; 
      } 
     }); 
0

에 의해 x와 y를 얻을 수 있습니다. AbsoluteLayout을 사용하여이 작업을 수행 할 수 있었지만 이제는 더 이상 사용되지 않습니다.

처음에는 레이아웃에서 버튼을 정의하고 보이지 않게 유지한 다음 터치 이벤트에서 Translate Animation을 사용하여 특정 위치로 이동하는 것이 좋습니다. 또한 단추를 보이게하는 것을 잊지 마라.

+0

고맙습니다. 전에는 애니메이션을 사용한 적이 없었습니다. 데모 예제가 있습니까? – Giz

1

여기에 하나의 데모를 텍스트 상자에 게시하십시오. 당신은 당신의 요구 사항을 바꿀 수 있습니다.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <FrameLayout 
     android:id="@+id/frameLayout1" 
     android:layout_height="fill_parent" android:layout_width="fill_parent"> 

     <LinearLayout android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:orientation="horizontal" 
      android:id="@+id/layout_map" 
      > 

      <TextView android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 

       android:text="One" 
       /> 
      <TextView android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 

       android:text="One" 
       /> 
     </LinearLayout> 
    </FrameLayout> 

</LinearLayout> 

MainActivity.java

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity { 
    FrameLayout frmLayout; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     frmLayout = (FrameLayout) findViewById(R.id.frameLayout1); 
     frmLayout.setFocusable(true); 
     LinearLayout et = new LinearLayout(this); 

     frmLayout.addView(et, 100, 100); 
     frmLayout.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       Log.i("TESTING", 
         "touch x,y == " + event.getX() + "," + event.getY()); 
       frmLayout.setPadding(Math.round(event.getX() - 20), 
         Math.round(event.getY()), 0, 0); 
       return true; 
      } 
     }); 

    } 
+0

감사합니다. 그것은 매우 도움이되었습니다. 여러 번 터치 할 때 어떻게 똑같이 할 수 있을지 아십니까? 어쩌면 여러 프레임 레이아웃을 사용합니까? – Giz

+0

시도해 봅시다 ... 그러면 제가 당신에게 말할 것입니다 –

+0

고마워요. 나도 시도해 볼게 .. 어떤 단서가 있다면 알려주지. – Giz

0

당신은 X를 얻을 수와 y는 onTouchEvent를 조정합니다.

onTouchEvent (MotionEvent 이벤트)를 재정의 한 다음 event.getX() 및 event.getY()를 호출하여 사용자가 터치 한 좌표 위치를 가져와야합니다 (부동 상태 임).

그런 다음 AbsoluteLayout을 사용하고 하위 항목에 android : layout_x 및 android : layout_y를 지정해야합니다. (AbsoluteLayouts는 일반적으로 사용되지 않습니다)

관련 문제