2013-11-09 23 views
5

私はスワイプジェスチャーfor Androidアプリケーションを実装するのが新しくなっています。 ImageViewを左から右にスワイプしようとしています。Android - スワイプでImageViewを移動する方法

public class MainActivity extends Activity implements OnClickListener{ 
private static final int SWIPE_MIN_DISTANCE = 10; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageView btnSwipe = (ImageView)findViewById(R.id.imgBtnSwipe); 
    btnSwipe.setOnClickListener(this); 
    gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 
    btnSwipe.setOnTouchListener(gestureListener); 
} 
class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(MainActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(MainActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 
@Override 
public void onClick(View v) { 
} 
} 

右スワイプとしてトーストメッセージが表示されています。しかし、イメージは動いていません。どのように実装することができますか?サンプルコード/リンクを教えてください。

答えて

5

画像に関する優れたチュートリアル用のリンクです:

btnSwipe.setTranslationX(e2.getX()); 
今 (左に向かって)左スワイプのために

btnSwipe.setTranslation(e1.getX()); 

、ImageViewのは、水平に右に左と右から左へと移行されます。しかし、これはAndroid APIレベル11以降で動作します。

+0

は2番目に「左に向かってスワイプ」して、もう一度setTranslationXする必要がありますね。 – iversoncru

+0

ビュー(ここではbtnSwipe ImageView)で「setTranslation」を使用しようとすると、「setTranslationXメソッドがタイプビューに対して未定義です」というエラーが発生しました ImageViewで同じエラーが発生しました。何か案は? – iversoncru

+0

APIレベルは何ですか? 11より小さい場合は、この機能は使用できません。 – Brianide

3

スワイプ機能にPagerAdapterを使用する必要があります。 次のようなもの:

public class FullScreenImageAdapter extends PagerAdapter { 

//Stores all the image paths 
private ArrayList<String> _imagePaths; 

......... 


@Override 
    public Object instantiateItem(ViewGroup container, int position) { 
//This method is called each time user swipes the screen 
//Write suitable code to display next image on the screen 
} 

...... 

} 

ここに公式文書のリンクがあります。 (右の方)

右スワイプの場合:ここで http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html

http://developer.android.com/training/animation/screen-slide.htmlは、私は以下のように簡単な解決策を見つけたスライダー

http://www.androidhive.info/2013/09/android-fullscreen-image-slider-with-swipe-and-pinch-zoom-gestures/

+0

私はページを移動する必要はありません。スワイプの画像ビューを左から右に動かすだけです。画像が右端に移動したら、アクティビティを切り替えてください。私はPageAdapterまたはViewFlipperを必要としません。ページ全体を変換します... –

+0

Oh ..水平ListViewを使用していますか?水平ListViewアダプタに画像を入力すると、各List ItemのレイアウトはImageViewになります。 –

+0

@AbhishekV彼は、画像ビューが1つしかなく、TouchEventsを使用してそれをスワイプしたいと述べました。 –

関連する問題