读书人

查看图片并兑现回弹效果

发布时间: 2012-12-16 12:02:32 作者: rapoo

查看图片并实现回弹效果
本人已经写好一个类,这个类里边可以实现“拖动图片后图片回弹”效果,只是回弹的速度太快而自己不知道怎么控制,请大神们指教该如何以更慢的速度来实现“拖动图片后图片回弹”这个效果,下边是代码:

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()+"--------视图坐标-----");
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是center,所以图片完全没有经过缩放
[最优解释]
使用Scroller类,这个类就是根据你想要滚动到的位置和想要滚动的时间计算一些值,并执行线程去执行,这样可以实现平滑的滚动。

或者你自己用一个线程来实现也行
[其他解释]
引用:
引用:你可以在利用Thread+Handler
在MotionEvent.ACTION_UP:
中起一个线程
然后把 (mx - curX) 距离分成若干份,线程每次都执行一小段
当回到原位的时候结束线程。

如果是android3.0以上版本,你可以考虑一下属性动画,属性动画是可以设置时间的。

如果有问题请回复
我还没接……

逛论坛,突然看到了这个scrollView
http://www.eoeandroid.com/thread-234342-1-1.html
我觉得应该对你有帮住,你可以看看,明天给你找找属性动画的demo
不过属性动画要求最低api是11,所以一般的应用都不轻易加属性动画,不过效果确实很好。

[其他解释]
你要在这里加点代码:

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


不要直接移动到底部0.0,在中间放一个loop循环,然后从当前位置经过许多迭代到达底部0.0。大概这样:

case MotionEvent.ACTION_UP:                                                
for (int i =mx; i > mx; i--) {
myImage.scrollTo((int) mx, 0);
}
break;


还可以在迭代之间加延迟,这样移动的更平滑。


[其他解释]
你可以在利用Thread+Handler
在MotionEvent.ACTION_UP:
中起一个线程
然后把 (mx - curX) 距离分成若干份,线程每次都执行一小段
当回到原位的时候结束线程。

如果是android3.0以上版本,你可以考虑一下属性动画,属性动画是可以设置时间的。

如果有问题请回复
[其他解释]
引用:
你可以在利用Thread+Handler
在MotionEvent.ACTION_UP:
中起一个线程
然后把 (mx - curX) 距离分成若干份,线程每次都执行一小段
当回到原位的时候结束线程。

如果是android3.0以上版本,你可以考虑一下属性动画,属性动画是可以设置时间的。

如果有问题请回复

我还没接触过属性动画,你能贴点代码吗?另外你的第一种方法感觉过于丝,感觉效率会不太好
[其他解释]
引用:
使用Scroller类,这个类就是根据你想要滚动到的位置和想要滚动的时间计算一些值,并执行线程去执行,这样可以实现平滑的滚动。

或者你自己用一个线程来实现也行

敢问二楼,你能提供个具体点的代码吗?谢谢
[其他解释]
引用:
引用:你可以在利用Thread+Handler
在MotionEvent.ACTION_UP:
中起一个线程
然后把 (mx - curX) 距离分成若干份,线程每次都执行一小段
当回到原位的时候结束线程。

如果是android3.0以上版本,你可以考虑一下属性动画,属性动画是可以设置时间的。


如果有问题请回复
我还没接……


代码在公司。。。明天我去给你找找看啊。
第一种确实很丝,还很不稳定。
[其他解释]
现在这个贴可以结了,我自己已经知道如何较好地实现这一效果了,写一个ImageView的子类,运用scroller来实现这个效果,当然ImageView的子类要实现View中一个方法:computeScroll,感谢所以回帖帮我的亲们。。。

读书人网 >Android

热点推荐