마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 누를시 이미지 이동 왼쪽, 오른쪽 이동

0 추천

-MainActivity.java-

package com.example.viewexam;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
 Character character;
 public static int X=0;

   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  character = (Character)findViewById(R.id.character);
 
  Button btnLeft = (Button)findViewById(R.id.btnLeft);
  btnLeft.setOnClickListener(new OnClickListener() {
  
   public void onClick(View v)
   {
    X -= 30;
   }
  });
 
  Button btnRight = (Button)findViewById(R.id.btnRight);
  btnRight.setOnClickListener(new OnClickListener() {
  
      public void onClick(View v)
      {
       X += 30;
      }
  });
   }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}

 

-activity_main.xml-

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:gravity="center"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="280dp"
        android:gravity="center" >

        <com.example.viewexam.Character
            android:id="@+id/character"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
               
  <LinearLayout
      android:layout_width="wrap_content"
         android:layout_height="wrap_content" >
    
   <Button
    android:id="@+id/btnLeft"
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="@string/btnLeft" />
 
   <Button
    android:id="@+id/btnRight"
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="@string/btnRight" />
   
  </LinearLayout>
</LinearLayout>

 

-Character.java-

package com.example.viewexam;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class Character extends View{
  Paint paint;
  Bitmap bitmap;

 public Character(Context context, AttributeSet attrs) {
    super(context, attrs);
    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ball);
   }

 @Override
  protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   canvas.drawBitmap(bitmap, MainActivity.X, 0, paint);
   invalidate();
  }
 }

위 코드는 제가 짠 코드인데요 

여기서 두가지 질문좀 하겠습니다

왼쪽 버튼을 누르면 왼쪽으로 한칸씩 이동하구요. 오른쪽 버튼을 누르면 오른쪽으로 한칸씩 이동을 합니다. 근데 처음에 이미지 왼쪽으로 위치되어 있네요 ㅠㅠ 아무리 해봐도 가운데로 위치가 안됩니다 ㅠㅠ

어떻게 하면 좋을까요?ㅠㅠ 그리고 왼쪽이나 오른쪽으로 계속을 버튼을 누르면 화면에 끝나는 선에서 멈춰야 하는데.. 계속이 이동하네요 ㅡㅡ

이미지가 화면에서 벗어나서 계속 이동을 합니다. 어떻게 하면 오른쪽 화면 끝이랑 왼쪽 화면 끝에서 끝날 수 있을까요?

martin_Mac (370 포인트) 님이 2013년 5월 7일 질문

2개의 답변

0 추천

canvas.drawBitmap(bitmap, MainActivity.X, 0, paint);

MainActivity에서 x기본값을 0 을 주고시작하기 때문에 이미지가 왼쪽에 붙어서 시작되어 집니다.

 

MainActivity.X 를 getLeft() + MainActivity.X로 바꿔주시고 

그전에 getLeft() + MainActivity.X 를 확인하여 화면밖으로 나가게되는 값인지 체크를 해줘합니다.

 

 

얼룩돼지 (15,720 포인트) 님이 2013년 5월 7일 답변
아 감사합니다 말씀하신대로 바꿔주고 밖으로 나가게되는 값인지 확인했는데요.. 폰으로 결과를 확인할때는 이미지가 위치가 역시 왼쪽으로 되어있고 오른쪽이나 왼쪽 버튼을 누르면 끝에서 끝나는게 아니라 계속이 이동이 되네요 ㅠㅠㅠ 이클립스 안에서는 가운데 위치에 되어있는데 말이죠 ㅠㅠ
0 추천

이거 제가 전에 답변 달아준 코드네요. 중앙에 오게 하려면

X = character.getWidth()/2;

캐릭터 뷰의 넓이를 받아서 2등분으로 나누면 중앙으로 올수 있구요.

끝에 가서 멈추게 하려면,

if(X > 0)
{
  // 이 안에 동작하고 싶은 코드 수행
}
if(X > character.getWidth()){
// 이안에 동작하고 싶은 코드 수행
}

하시면 됩니다. 따라서,,,

package com.example.viewexam;
 
import java.io.CharConversionException;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class ViewExamActivity extends Activity {
  Character character;
  public static int X;
  
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   
   character = (Character)findViewById(R.id.character);
   X = character.getWidth()/2;
   
   Button btnLeft = (Button)findViewById(R.id.btnLeft);
   btnLeft.setOnClickListener(new OnClickListener() {
   
    public void onClick(View v)
    {
     if(X > 0)
     {
      X -= 30;
     }
    }
   });
  
   Button btnRight = (Button)findViewById(R.id.btnRight);
   btnRight.setOnClickListener(new OnClickListener() {
   
       public void onClick(View v)
       {
        if(X < character.getWidth())
         X += 30;
       }
   });
   }
}

라고 하시면 됩니다.

센스가이 (2,010 포인트) 님이 2013년 5월 7일 답변
java부분에만 님께서 말씀하신대로 위  코드로 작성만 하면 되는건가요? xml 부분에서는 따로 수정할 껀 없는건가요?  2등분을 해도 왼쪽으로 가있구요 왼쪽에서는 끝에서 멈추지만 오른쪽은 계속 이동하네요 ㅠ
onCreate에서 getWidth()를 해봐야 항상 0이 리턴됩니다.
...