gpt4 book ai didi

android - onfling() 由于某种原因没有被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:22 26 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现手势,但由于某种原因,没有调用 onfling()。我尝试阅读许多关于此的帖子并尝试修复我的代码,但它不起作用。下面是我的代码。请看:

public class MainMenuSlider extends Activity implements OnClickListener{

protected MyGestureListener myGestureListener;

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 ViewFlipper vf;
private Animation animFlipInNext,animFlipOutNext, animFlipInPrevious, animFlipOutPrevious;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.mainmenuslider);
myGestureListener = new MyGestureListener(this);

//vf for viewflipper
vf=(ViewFlipper)findViewById(R.id.ViewFlipper01);
animFlipInNext = AnimationUtils.loadAnimation(this, R.anim.flipinnext);
animFlipOutNext = AnimationUtils.loadAnimation(this, R.anim.flipoutnext);
animFlipInPrevious = AnimationUtils.loadAnimation(this, R.anim.flipinprevious);
animFlipOutPrevious = AnimationUtils.loadAnimation(this, R.anim.flipoutprevious);

imageone = (ImageView) findViewById(R.id.imageone);
imagetwo = (ImageView) findViewById(R.id.imagetwo);
imageone.setOnClickListener(myGestureListener);
imagetwo.setOnClickListener(myGestureListener);


}


class MyGestureListener extends SimpleOnGestureListener implements OnTouchListener
{
Context context;
GestureDetector gDetector;

public MyGestureListener()
{
super();
}

public GestureDetector getDetector()
{
return gDetector;
}

public MyGestureListener(Context context)
{
this(context, null);
}

public MyGestureListener(Context context, GestureDetector gDetector)
{

if(gDetector == null)
gDetector = new GestureDetector(context, this);

this.context = context;
this.gDetector = gDetector;
}

public boolean onDown(MotionEvent event)
{
return true;
}


@Override
public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY)
{
try {
if(e1.getX() > e2.getX() && Math.abs(e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
vf.setInAnimation(animFlipInPrevious);
vf.setOutAnimation(animFlipOutPrevious);
vf.showPrevious();
}else if (e1.getX() < e2.getX() && e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
vf.setInAnimation(animFlipInNext);
vf.setOutAnimation(animFlipOutNext);
vf.showNext();
}
} catch (Exception e) {
// nothing
}
return true;

}

@Override
public boolean onSingleTapConfirmed(MotionEvent e)
{

return super.onSingleTapConfirmed(e);
}

public boolean onTouch(View v, MotionEvent event)
{

// Within the MyGestureListener class you can now manage the event.getAction() codes.

// Note that we are now calling the gesture Detectors onTouchEvent. And given we've set this class as the GestureDetectors listener
// the onFling, onSingleTap etc methods will be executed.
return gDetector.onTouchEvent(event);
}


public void onClick(View v)
{
if (v == imageone)
{
Intent j = new Intent(getApplicationContext(), MainActivity.class);
j.putExtra("slideindex", 0);
startActivity(j);
}

if (v == imagetwo)
{
Intent j = new Intent(getApplicationContext(), MainActivity.class);
j.putExtra("slideindex", 1);
startActivity(j);
}
}

public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY)
{
return true;
}


}
}

编辑:这是请求的 mainmenuslider XML 文件内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#291E3D" >

<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >

<ViewFlipper android:id="@+id/ViewFlipper01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center" >

<!-- adding views to ViewFlipper -->

<!-- First Slide -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >


<TextView android:id="@+id/title1"
android:text="title1"
android:textColor="#ffffff"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="3dip"
android:textSize="25dip"/>


<ImageView android:id="@+id/imageone"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/splash_screen">
</ImageView>


</LinearLayout>

<!-- Second Slide -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >


<TextView android:id="@+id/title2"
android:text="title2"
android:textColor="#ffffff"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="3dip"
android:textSize="25dip" />


<ImageView android:id="@+id/imagetwo"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sunnahsplash">
</ImageView>


</LinearLayout>



</ViewFlipper>





<!-- footer -->
<LinearLayout android:id="@+id/LinearLayout03"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_marginTop="10dip">

<Button android:id="@+id/Button02"
android:layout_height="wrap_content"
android:text="&lt;Previous"
android:textSize="18dip"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginRight="15dip"
android:padding="5dp"
android:background="@drawable/background_button_slider"></Button>
<Button android:id="@+id/Select"
android:text=" Select "
android:textSize="18dip"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:padding="5dp"
android:background="@drawable/background_button_slider"></Button>
<Button android:id="@+id/Button01"
android:text=" Next&gt;"
android:textSize="18dip"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="15dip"
android:padding="5dp"
android:background="@drawable/background_button_slider"></Button>
</LinearLayout>

</LinearLayout>

</ScrollView>


</LinearLayout>

最佳答案

根据我的说法,由于 ScrollView ,fling 无法正常工作....将此代码添加到您的 MainMenuSlider 类中。

   GestureDetector gestureDetector
= new GestureDetector(myGestureListener);

@Override
public boolean dispatchTouchEvent(MotionEvent e)
{
super.dispatchTouchEvent(e);
return gestureDetector.onTouchEvent(e);
}

我已经将你的类代码编辑为

      public class MainMenuSlider extends Activity implements OnClickListener{



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 ViewFlipper vf;
private Animation animFlipInNext,animFlipOutNext, animFlipInPrevious, a nimFlipOutPrevious;

private ImageView imageone;

private ImageView imagetwo;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main_menu_slider);
//myGestureListener = new MyGestureListener(this);

//vf for viewflipper
vf=(ViewFlipper)findViewById(R.id.ViewFlipper01);
animFlipInNext = AnimationUtils.loadAnimation(this, R.anim.flipinnext);
animFlipOutNext = AnimationUtils.loadAnimation(this, R.anim.flipoutnext);
animFlipInPrevious = AnimationUtils.loadAnimation(this, R.anim.flipinprevious);
animFlipOutPrevious = AnimationUtils.loadAnimation(this, R.anim.flipoutprevious);

imageone = (ImageView) findViewById(R.id.imageone);
imagetwo = (ImageView) findViewById(R.id.imagetwo);
imageone.setOnClickListener(myGestureListener);
imagetwo.setOnClickListener(myGestureListener);


}

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}

SimpleOnGestureListener simpleOnGestureListener
= new SimpleOnGestureListener(){

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {

float sensitvity = 50;
if((e1.getX() - e2.getX()) > sensitvity){
vf.showPrevious();
}else if((e2.getX() - e1.getX()) > sensitvity){
vf.showNext();
}

return true;
}

};

GestureDetector gestureDetector
= new GestureDetector(simpleOnGestureListener);
@Override
public boolean dispatchTouchEvent(MotionEvent e)
{
super.dispatchTouchEvent(e);
return gestureDetector.onTouchEvent(e);
}
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "Hello",Toast.LENGTH_SHORT
).show();
}

此代码运行正常..

关于android - onfling() 由于某种原因没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17830529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com