我是一名n00b程序员,需要很多帮助。
出于教学目的,我想制作简单的植物和植物。动物群(植物和动物)百科全书
我想让我的主屏幕可以像Android的主屏幕一样拖动。向右滑动以打开Plant页面并向左滑动以打开Animal页面。 我不知道如何制作过渡效果。因此,我们可以将其拖到中途以查看下一页中的内容,然后向后拖动以取消它
你们可以分享链接来制作可拖动的屏幕吗?
之前谢谢
[编辑]
@Agarwal 我尝试了你的Link2中的代码并且它无法正常工作
我尝试通过将Toast放入内部类但未显示Toast来测试是否检测到手势。 Link1基本上是相同的。
从代码的外观来看,我认为它不能让我的屏幕像Android的主屏幕那样拖拽
我的代码:
public class Home extends Activity implements OnClickListener {
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
ImageButton flora, fauna;
Intent go;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
gestureDetector = new GestureDetector(new SwipeGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
}
private void initialize() {
//find view by id to image button
//set onClickListener to image button
}
public void onClick(View v) {
//normal switch and case for each button
}
private void onLeftSwipe() {
Toast t = Toast.makeText(Home.this, "Left swipe", Toast.LENGTH_LONG);
t.show();
go = new Intent("test.apps.FLORA");
startActivity(go);
}
private void onRightSwipe() {
Toast t = Toast.makeText(Home.this, "Right swipe", Toast.LENGTH_LONG);
t.show();
go = new Intent("test.apps.FAUNA");
startActivity(go);
}
private class SwipeGestureDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 50;
private static final int SWIPE_MAX_OFF_PATH = 200;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
Toast t = Toast.makeText(Home.this, "Gesture detected", Toast.LENGTH_SHORT);
t.show();
float diffAbs = Math.abs(e1.getY() - e2.getY());
float diff = e1.getX() - e2.getX();
if (diffAbs > SWIPE_MAX_OFF_PATH)
return false;
// Left swipe
if (diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Home.this.onLeftSwipe();
}
// Right swipe
else if (-diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Home.this.onRightSwipe();
}
} catch (Exception e) {
Log.e("Home", "Error on gestures");
}
return false;
}
}
}
答案 0 :(得分:15)
我意识到这是一个老问题,但是对于其他任何人都在想为什么上面的代码不起作用,这是因为他没有将OnTouchListener设置为View对象。这就是为什么他的滑动“事件”没有被提起,因为没有人在听它。
他可以添加这一行来设置他的图像按钮上的滑动(虽然你可能想要一个更好的View对象然后这个):
flora.setOnTouchListener(gestureListener);
答案 1 :(得分:14)
您应该使用ViewPager,请参阅以下链接。
http://android-developers.blogspot.in/2011/08/horizontal-view-swiping-with-viewpager.html
http://developer.android.com/training/implementing-navigation/lateral.html#horizontal-paging
答案 2 :(得分:2)
Android活动刷卡检测
创建基本活动类
public abstract class _SwipeActivityClass extends AppCompatActivity
{
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
gestureDetector = new GestureDetector( this, new SwipeDetector());
}
protected abstract void onSwipeRight();
protected abstract void onSwipeLeft();
public class SwipeDetector extends GestureDetector.SimpleOnGestureListener
{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
// Check movement along the Y-axis. If it exceeds SWIPE_MAX_OFF_PATH,
// then dismiss the swipe.
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
{
return false;
}
//toast( "start = "+String.valueOf( e1.getX() )+" | end = "+String.valueOf( e2.getX() ) );
//from left to right
if( e2.getX() > e1.getX() )
{
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
onSwipeRight();
return true;
}
}
if( e1.getX() > e2.getX() )
{
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
onSwipeLeft();
return true;
}
}
return false;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
// TouchEvent dispatcher.
if (gestureDetector != null)
{
if (gestureDetector.onTouchEvent(ev))
// If the gestureDetector handles the event, a swipe has been
// executed and no more needs to be done.
return true;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
return gestureDetector.onTouchEvent(event);
}
}
然后从 _SwipeActivityClass
扩展活动实施方法 onSwipeLeft()和 onSwipeRight()以启动其他活动
答案 3 :(得分:-5)
使用此处的Intent函数转到手势监听器上的下一个活动
它会b