簡體   English   中英

回彈時如何減慢圖片速度

[英]how to slow down the picture when it springs back

我寫了一個可以拖動圖像然后彈回圖像的應用程序。 但是回彈的速度太快。 我已經嘗試過,但是找不到降低速度的方法。

我該如何控制速度?

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為中心,圖像尚未縮放。

MotionEvent.ACTION_UP告訴Android將圖像移動到指定位置的情況下switcherView.scrollTo(0, 0)調用switcherView.scrollTo(0, 0)

如果要減慢移動速度,則需要在ImageView switcherView指定動畫

請參見TranslateAnimation類。 我懷疑您只是需要指出正確的方向,因此Google搜索提供了許多參考。

你需要在這里寫一些代碼

 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);

更新如果您從右向左拖動,則此代碼有效,但從左向右拖動時,此代碼無法正常工作,請自行糾正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM