2012-05-07 10 views
1
MyGallery gallery = (MyGallery)findViewById(R.id.gallery_photo); 
PhonePhotoViewerAdapter = new PhonePhotoViewerAdapter(this, FilePath); 
gallery.setAdapter(PhonePhotoViewerAdapter); 
gallery.setSelection(0); 

上記はスクロールビューで写真を表示するためのコードです。
しかし、私が次に集中したいのであれば、画面上で指を動かす必要があります。
小さい距離を移動している間にピントを変えたい
どうすればいいですか?
私は以下のようにクラスのギャラリーを変更しました:コードの下ギャラリーのスクロールビューを変更するには

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
if (e1.getX() - e2.getX() > 50 && Math.abs(velocityX) > 100) {  
// Fling left 
} else if (e2.getX() - e1.getX() > 50 && Math.abs(velocityX) > 100) {  
// Fling right 
} 
return false; 
} 

を私の修正である:

gallery.setLongClickable(false); 
gallery.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      int action = event.getAction(); 
      if((action == MotionEvent.ACTION_DOWN) && !Clicking) { 
       StartX = event.getX(); 
       StartIndex = gallery.getSelectedItemPosition(); 
       Clicking = true; 
      } 
      else if((action == MotionEvent.ACTION_UP) && Clicking) { 
       EndX = event.getX(); 
       EndIndex = gallery.getSelectedItemPosition(); 
       Clicking = false; 
       if(((EndX - StartX) > 50) && (StartIndex == EndIndex)) { 
        if(EndIndex > 0) { 
         gallery.setSelection(EndIndex - 1); 
        } 
       } 
       else if(((StartX - EndX) > 50) && (StartIndex == EndIndex)) { 
        if(EndIndex < count - 1) { 
         gallery.setSelection(EndIndex + 1); 
        } 
       }    
      } 
      return false; 
     } 
    }); 

しかし、いくつかの異常が示すです。

答えて

1

私の問題の解決策を見つける。
これは、MyGalleryを以下のように定義しています。

public class MyGallery extends Gallery { 
    public MyGallery(Context context, AttributeSet attrSet) { 
     super(context, attrSet); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     int kEvent;  
     if(isScrollingLeft(e1, e2)) { 
      //Check if scrolling left  
      kEvent = KeyEvent.KEYCODE_DPAD_LEFT;  
     } 
     else { 
      //Otherwise scrolling right  
      kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;  
     }  
     onKeyDown(kEvent, null);  
     return true;  
    } 

    private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) { 
     return e2.getX() > e1.getX(); 
    } 

    @Override 
    protected android.view.ViewGroup.LayoutParams generateLayoutParams (android.view.ViewGroup.LayoutParams p) { 
     return super.generateLayoutParams(p); 
    } 
} 
関連する問題