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

버튼 클릭시 이미지 이동(왼쪽/오른쪽)

0 추천

센스가이님께서 알려주신대로 수정해서 확인했는데요...

왼쪽으로 이동할때는 왼쪽 끝에서 끝났는데..오른쪽으로 이동할때는 계속 이동하네요...ㅠㅠㅠ

MainActivity.java 부분만 님께서 말씀하신대로 수정하면 되는건지..

아님 다른 곳도 수정을 해야하는지 궁금하네요 ㅠ

그리고 이미지 위치를 가운데로 위치할려고 이등분하여 나누어도 위치는 그대로 왼쪽으로 위치하여 있네요 ㅠㅠ

밑에는 제가 짠 코드입니다.

-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;

   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_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;
      }
  });
   }

 @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;
 }

}

-ativity_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" >
        <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월 8일 질문

1개의 답변

0 추천

 

===== main =====

 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity
{
    Character character;
 
    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 )
            {
                character.move( -1 );
            }
        } );
 
        Button btnRight = (Button)findViewById( R.id.btnRight );
        btnRight.setOnClickListener( new OnClickListener()
        {
 
            public void onClick( View v )
            {
                character.move( 1 );
            }
        } );
    }
}
 
 
===== Character =====
 
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.Display;
import android.view.View;
import android.view.WindowManager;
 
public class Character extends View
{
    Paint  paint;
    Bitmap bitmap;
    int    X;
    int    sw; // 스크린넓이
    int    c; // 이미지 넓이의 절반
 
    public Character( Context context, AttributeSet attrs )
    {
        super( context, attrs );
 
        WindowManager wm = (WindowManager)context.getSystemService( Context.WINDOW_SERVICE );
        Display display = wm.getDefaultDisplay();
        sw = display.getWidth();
 
        bitmap = BitmapFactory.decodeResource( getResources(), R.drawable.ball );
        c = bitmap.getWidth() / 2;
        X = sw/ 2; // 초기 X값을 구한다. (가운데)
    }
 
    @Override
    protected void onDraw( Canvas canvas )
    {
        super.onDraw( canvas );
        canvas.drawBitmap( bitmap, ( X - c ), 0, paint );
        invalidate();
    }
 
    public void move( int d )
    {
        int dx = X + ( 30 * d ); // 왼쪽은 마이너스, 오른쪽은 플러스 
 
        if ( dx > c && dx < ( sw - c ) )
        {
            X = dx;
        }
 
    }
}

 

 

===============

move 부분을 더 연구해보세요.

페코페코 (250 포인트) 님이 2013년 5월 8일 답변
...