1

我编写了一个可以拖动图像然后弹回图像的应用程序。但是回弹的速度太快了。我已经尝试过,但找不到减慢速度的方法。

我怎样才能控制这个速度?

public class CustomViewActivity extends Activity {

    float mx,my;
    ImageView switcherView;
    Bitmap bitmap;

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

        switcherView = (ImageView) this.findViewById(R.id.img);  
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kh06);
        switcherView.setImageBitmap(bitmap);

        switcherView.setOnTouchListener(new View.OnTouchListener() {   
            public boolean onTouch(View arg0, MotionEvent event) {  
                float curX, curY;  
              //System.out.println(switcherView.getScrollX()+"--------view axis-----");
                switch (event.getAction()) {        
                    case MotionEvent.ACTION_DOWN:  
                        mx = event.getX();  
                        break;  
                    case MotionEvent.ACTION_MOVE:  
                        curX = event.getX();    
                        switcherView.scrollBy((int) (mx - curX), 0);  
                        mx = curX;  
                        break;  
                    case MotionEvent.ACTION_UP:                                                
                        switcherView.scrollTo(0, 0);
                        break;  
                }  
                return true;  
            }  
        });
    }
  }

图像的 scaleType 是中心,图像没有被缩放。

4

2 回答 2

0

switcherView.scrollTo(0, 0)该案例中的调用MotionEvent.ACTION_UP告诉 Android 将图像移动到指定位置。

如果你想减慢这个动作,那么你需要在ImageView switcherView

请参阅TranslateAnimation类。我怀疑你只需要指出正确的方向,谷歌搜索这提供了许多参考。

于 2012-12-04T08:44:27.593 回答
0

你需要在这里写一些代码

 case MotionEvent.ACTION_UP:                                                
    switcherView.scrollTo(0, 0);
    break; 

与其直接移回 0,0,不如使用 for 循环并在多次迭代中从当前位置转到 0,0。像这样的东西。

 case MotionEvent.ACTION_UP:                                                
    new Timer().schedule(new TimerTask() {

                    @Override
                    public void run() {

                        MainActivity.this.runOnUiThread(new Runnable() {

                            public void run() {
                                myImage.scrollTo((int) mx, 0);
                                myImage.invalidate();

                            }
                        });

                        if (mx > 0) {
                            mx -= 1;
                        } else {
                            cancel();
                        }



                    }
                }, 100,10);

更新 如果您从右向左拖动,则此代码有效,但从左向右拖动时无法正常工作,因此请自行纠正。

于 2012-12-04T08:50:44.720 回答