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

버튼을 눌렀을때 image 좌표를 x축으로 쓰레드로 변화하기 질문이요!!ㅠㅠㅠㅠ급합니당

0 추천
left.setOnTouchListener(new View.OnTouchListener(){
    public boolean onTouch(View v, MotionEvent event)
            {
                   if(MotionEvent.ACTION_DOWN == event.getAction())
                   {
                         few.start();
             }
         }
   
    }
ab few = new ab();
class ab extends Thread{
    
                             public void run(){
    
                               while(true){
    
                                        try {
                                              Thread.sleep(1000);
    
                                              }
                                                  catch(Exception ex) {
    
                                                        }
 
                              params = (AbsoluteLayout.LayoutParams) image.getLayoutParams();
                              params.x -=3;
                              image.setLayoutParams(params); 
    
                    }
lefe 라는 버튼이 다운상태일때 image가 x축으로 -3만큼 1초간격으로  up하기 전까지 계속 움직이도록 하려고 소스를 짜고있는데요 어느부분이 잘못된건지.. image가 움직이질않네요... 고수님들 한수가르쳐주세요 ㅠㅠㅠ부탁드립니다..
dsdnisf (200 포인트) 님이 2014년 6월 25일 질문
dsdnisf님이 2014년 6월 25일 수정
이미지가 wrap_contents맞나요??
네  xml파일에 width하고 height 모두  wrap_content로 되어있습니다
근데 이거 에러 안나나요? 빌드는 되는데 동작이 안한다는건가요??
네 빌드는되는데 동작을안합니다
그리고 지금 사용 하는 버전에서는 absolute 안씁니다

FrameLayout 써보세요
그럼 x,y축으로 image를 제어할수가 없던데..
할수 있나요??

1개의 답변

0 추천

스레드안에서 UI를 건들면 어플이 죽을텐데요

아래 참조해서 run 대신에 runOnUiThread 를 사용해보셔요.

http://sharepid.tistory.com/989

 

그리고 params = (AbsoluteLayout.LayoutParams) image.getLayoutParams(); 여기에서

image가 포함된 레이아웃이 AbsoluteLayout 이 맞는 지도 확인해보셔요.

이게 같지않으면 에러를 뿜어낼것입니다.

nicehee (73,100 포인트) 님이 2014년 6월 26일 답변
AbsoluteLayout에 포함되어있습니다
 runOnUiThread 일단 이거에 대해서 공부해보고 다시 질문드리겠습니다
left.setOnTouchListener(new View.OnTouchListener(){
            public boolean onTouch(View v, MotionEvent event)
            {
                if(MotionEvent.ACTION_DOWN == event.getAction())
                {
                        t.start();
                       
                }
                else if(MotionEvent.ACTION_UP == event.getAction())
                {
                        t.interrupt();   
                }
                    
                           
                       
               
            return true;
            }
        });
        
        
       
   
    t= new Thread(new Runnable() {
       
               
       
        @Override
        public void run() {
           
            try{
                runOnUiThread(new Runnable() {
                   
                    @Override
                    public void run() {
                       
                            while(!(t.isInterrupted())){
                            int i=3;
                            Message msg = new Message();
                            msg.arg1=i;
                            handler.sendMessage(msg);
                            }
                    }
                   
                });
                Thread.sleep(1000);
            }catch(InterruptedException e) {
               
            }
           
        }
       
       
       
       
    });
        
    }
         Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                int value = msg.arg1;
                params = (AbsoluteLayout.LayoutParams) image.getLayoutParams();
                params.x -=value;
                image.setLayoutParams(params);
                 
            }
        };
    이렇게 소스를 짜봤는데  어디가 잘못된건지 모르겠어요.. 버튼을누르면 종료되네요..ㅠㅠㅠ
...