动作移动事件在ANDROID中不是更多时如何获得动作?

时间:2011-08-04 05:49:38

标签: android motion

我在MotionEvent上旋转图像。当我旋转它时,图像也会缩小。我想在移动事件不多时显示警报对话..

这里我发布了我的代码......

私人ProgressBar distanceBar;     私人按钮回来;     private ImageView setAccuracy;     float currentDegrees = 0;     float currentDistance;     float totalDistance = 1000;     float totalDegree = 360;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.errandboy_destination);

    back = (Button) findViewById(R.id.back);
    distanceBar = (ProgressBar) findViewById(R.id.errand_progress);
    distanceBar.setMax(1000);
    setAccuracy = (ImageView) findViewById(R.id.errandAnim);
    OnTouchListener backListener = new OnTouchListener() {
        public boolean  onTouch  (View  v, MotionEvent  event) {
            if (event.getAction()==MotionEvent.ACTION_UP){
                finish();
            }
            return false;
        }
    };
    back.setOnTouchListener(backListener);
    setAccuracy.setOnTouchListener(onTableTouched);
}
public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
           case MotionEvent.ACTION_MOVE:
                if (currentDegrees > 360) {
                    currentDegrees = 0;
                }
                currentDegrees = currentDegrees + 1;
                updateRotation(currentDegrees);
                System.out.println("Current Degree is:--->" + currentDegrees);
                currentDistance = (currentDegrees * totalDistance)
                        / totalDegree;
                System.out
                        .println("Current Distance is:--->" + currentDistance);
                int progress = (int) currentDistance;
                distanceBar.setProgress(progress);
                break;

           case MotionEvent.ACTION_CANCEL:
            AlertDialog.Builder choice = new Builder(getParent());
            choice.setTitle("Error");
            choice.setMessage("message");
            choice.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            return;
                        }
                    });
            choice.create().show();
            break;
        }

        return true;
    }
};
private void updateRotation(double rot) {
    float newRot = new Float(rot);
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.anim1);
    int width = bitmapOrg.getWidth();
    int height = bitmapOrg.getHeight();
    int newWidth = 200;
    int newHeight = 200;
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    int centerX = width/2;
    int centerY = height/2;

    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    matrix.postRotate(newRot);
    matrix.postTranslate(centerX, centerY);
    matrix.preTranslate(-centerX, -centerY);
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true);
    BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
    setAccuracy.setImageDrawable(bmd);

}

}

我怎样才能克服这个问题?

...谢谢

1 个答案:

答案 0 :(得分:1)

在您的情况下使用MotionEvent.ACTION_UP代替MotionEvent.ACTION_CANCEL。

case MotionEvent.ACTION_UP:
        AlertDialog.Builder choice = new Builder(getParent());
        choice.setTitle("Error");
        choice.setMessage("message");
        choice.setPositiveButton("Ok",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        return;
                    }
                });
        choice.create().show();
        break;