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

ここにコードを書く必要があります

 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 に答える
0

switcherView.scrollTo(0, 0)ケース内の呼び出しはMotionEvent.ACTION_UP、画像を指定された場所に移動するように Android に指示します。

この動きを遅くしたい場合は、アニメーションを指定する必要がありますImageView switcherView

TranslateAnimationクラスを参照してください。正しい方向に向ける必要があっただけだと思います。グーグルで検索すると、多くの参照が得られます。

于 2012-12-04T08:44:27.593 に答える