Gooday Note Scrap Source Android login
 
작성일 : 12-10-17 15:43
제스처 - gesture
 글쓴이 : 기리
조회 : 4,951   추천 : 0   비추천 : 0  
   GesturesDemos.zip (27.2K) [1] DATE : 2012-10-17 15:46:15
   http://blog.naver.com/PostView.nhn?blogId=neo__one&logNo=90075703987&r… [1264]

제스쳐

 

이번에 소개할 것은 제스쳐이다. Gesture클래스는 Level 4니까 1.6때부터 추가된 부분으로Gestures Builder가 빌트인 되어있는 것을 알 수 있다. 다음 예제는 공식 홈의 블로그 카테고리에 소개 된 Gesture예제를 활용하였다.

공홈에 보니 그사이에 또 업데이트가 있었다. 너무 자주 있다.

그래도 업데이트를 간소화했으니.. 됐나.

 


package neo.one;

 

import java.util.ArrayList;

 

import android.app.Activity;

import android.content.Intent;

import android.gesture.Gesture;

import android.gesture.GestureLibraries;

import android.gesture.GestureLibrary;

import android.gesture.GestureOverlayView;

import android.gesture.Prediction;

importandroid.gesture.GestureOverlayView.OnGesturePerformedListener;

import android.os.Bundle;

import android.widget.Toast;

 

public class Gestures extends Activity implementsOnGesturePerformedListener {

       private GestureLibrary mLibrary;

       Intent intent = new Intent();

 

       @Override

       public void onCreate(Bundle savedInstanceState) {

             super.onCreate(savedInstanceState);

             setContentView(R.layout.main);

 

             mLibrary = GestureLibraries.fromRawResource

(this, R.raw.gesturess);

             if (!mLibrary.load()) {

                    finish();

             }

 

             GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);

             gestures.addOnGesturePerformedListener(this);

 

       }

 

       public void onGesturePerformed

(GestureOverlayView overlay, Gesture gesture) {

       ArrayList<Prediction> predictions =

                        mLibrary.recognize(gesture);

 

             if (predictions.size() > 0) {

                    Prediction prediction = predictions.get(0);

                    if (prediction.score > 1.0) {

                      Toast.makeText(this,

prediction.name, Toast.LENGTH_SHORT).show();

 

              if (prediction.name.equals("phone_dial")) {

                       intent = new Intent(Intent.ACTION_DIAL);

                           }

                           if (prediction.name.equals("2"))

                           {                    

                      intent = new Intent(Intent.ACTION_SEARCH);

                           }

                           if (prediction.name.equals("1")) {

                      intent.setClass(Gestures.this,Next.class);

                           }

                          

                           startActivity(intent);

 

                    }

             }

       }

}

 

대충 보면, gesture를 가져와서 해당하는 제스쳐가 있는 경우 액션을 취해주는 것으로

지금은 2를 인식하여 search를 활성화 시켰고 이때 default로 어떤 액션을 지정할 지 설정할 수 있다.

그렇다면 문제의 gesture는 어떻게 생성하여 추가할까. 이부분에 대해서는 Tech에서.

[출처] Gesture|작성자 neo__one


기리 12-10-17 16:08
 
public class Gesture_draw extends Activity implements OnClickListener {
    private static final String str_name = null;
 
  Gesture mGesture;
  Button mSaveBtn;
  Button mResetBtn;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gesturedraw);
       
        mSaveBtn=(Button)findViewById(R.id.btn_gsave); //저장버튼
        mSaveBtn.setOnClickListener(this);
       
        mResetBtn=(Button)findViewById(R.id.btn_gcancel); //리셋버튼
        mResetBtn.setOnClickListener(this);
                     
        GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay_View);
        overlay.addOnGestureListener(new GesturesProcessor());
               
    }
 public void onClick(View v) {
  // TODO Auto-generated method stub
 
  if (v == mSaveBtn)
      {
    if (mGesture != null) {
         
    File file = new File(Environment.getExternalStorageDirectory(), "aa");
              GestureLibrary store = GestureLibraries.fromFile(file);
                                     
              store.addGesture("abc", mGesture); 
              store.save();
              setResult(RESULT_OK);             
           
              if(store.save()) {
              // 저장완료 알림 토스트
              Toast.makeText(this, "저장완료 ", Toast.LENGTH_SHORT).show();
             
              Intent it = new Intent(Gesture_draw.this, Gesture_list.class);
        startActivity(it);
              }
    }
    else
    {
    Toast.makeText(this, "제스처를 그려주세요. ", Toast.LENGTH_SHORT).show();
    }
      }else if(v.getId() == R.id.btn_gcancel) {
        Intent it = new Intent(Gesture_draw.this, Gesture_list.class);
    startActivity(it);
      }
 
    }
class GesturesProcessor implements GestureOverlayView.OnGestureListener {
 
 public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
        mSaveBtn.setEnabled(false);
        mGesture = null;
    }
   
 public void onGesture(GestureOverlayView overlay, MotionEvent event) {
    }
   
 public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
        mGesture = overlay.getGesture();
       
        mSaveBtn.setEnabled(true);
    }
    public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
    }
 }
}
기리 12-10-17 17:03