0

画面をタッチすると、OnTouch メソッドが 2 回呼び出されます。したがって、メソッド「showdetails」の新しいアクティビティのインテントは、ビューが 2 回関連付けられたアクティビティをロードします。なんで?1つだけ必要です...

public class DeptFragment extends Fragment implements OnTouchListener {

Context mContext = getActivity();
ImageView cacheImage,targetImage; 
ListView List;
ArrayList<String> tabDepartement;
ArrayList<String> tabCommunes;
int codeDepartementCrt;
Departement DepartementCrt;
List<Commune> listCommuneCrt;
Bundle nomBundle;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState) ;
    return inflater.inflate(R.layout.dept_fragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedState) {
    super.onActivityCreated(savedState);
    mContext=getActivity();
    View mView = getView();

    targetImage = (ImageView) mView.findViewById(R.id.targetDeptImage);

    targetImage.setOnTouchListener(this); 



}

public boolean onTouch(View v, MotionEvent event) {
    View mView = getView();

    ImageView imageView = (ImageView) mView.findViewById(R.id.cacheDeptImage);

    Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
    int pixel = bitmap.getPixel((int) event.getX(),(int) event.getY());

    int redValue = Color.red(pixel);
    int blueValue = Color.blue(pixel);
    int greenValue = Color.green(pixel);

    showDetails(redValue,greenValue,blueValue);

    return true;

}

/**
 * Helper function to show the details of a selected item, by starting a
 * whole new activity in which it is displayed.
 */
void showDetails(int red, int green, int blue) {

    DepartementCrt=rechercherDepartement(red,green,blue);

    if (DepartementCrt != null) {

                Intent intent = new Intent();
                intent.setClass(getActivity(), DeptDetailActivity.class);
                intent.putExtra("code", DepartementCrt.Code);
                startActivity(intent);
    }
}


private Departement rechercherDepartement(int redValue, int greenValue, int blueValue) {
    DepartementRepository departementRepository=new DepartementRepository(mContext);
    Departement departement;

    departementRepository.Open();
    departement= departementRepository.rechercherDepartement(redValue, greenValue, blueValue);
    departementRepository.Close();

    return departement;
}

}

4

2 に答える 2

4

on touch メソッドは、さまざまなイベント タイプに対して呼び出されます。

これらのいくつかは次のとおりです。

  • MotionEvent.ACTION_DOWN
  • MotionEvent.ACTION_UP
  • MotionEvent.ACTION_MOVE

おそらく、次のようなスイッチを使用してイベントを評価することを検討する必要があります。

public boolean onTouch(View v, MotionEvent me) {

        int action = me.getAction();

        switch( action ) {
        case MotionEvent.ACTION_DOWN:

            break;
        case MotionEvent.ACTION_UP:

            break;
        case MotionEvent.ACTION_MOVE:

            break;
        default:

        }
 }

最後に、ビューのクリック アクションのみを評価する場合は、View.onClickListener インターフェイスを使用する必要があります。

myView.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        //do stuff
    }
});
于 2012-06-29T12:47:09.300 に答える
0

たぶん、あなたは連続して画像に触れています.初めてタッチを検出したら、フラグを設定してトグルする必要があります.

コードを次のように変更します。

Boolean consumeTouch = true;

    public boolean onTouch(View v, MotionEvent event) {

        if (consumeTouch) {

            consumeTouch = false;

            View mView = getView();

            ImageView imageView = (ImageView) mView
                    .findViewById(R.id.cacheDeptImage);

            Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable())
                    .getBitmap();
            int pixel = bitmap.getPixel((int) event.getX(), (int) event.getY());

            int redValue = Color.red(pixel);
            int blueValue = Color.blue(pixel);
            int greenValue = Color.green(pixel);

            showDetails(redValue, greenValue, blueValue);

            return true;
        }
        return false;

    }
于 2012-06-29T12:47:45.203 に答える