onTouchEvent只是检测MotionEvent.ACTION_MOVE不能上下

问题描述

我已经在我的activity上实现了onTouchEvent。现在我遇到了一个问题。对于非常轻扫的方向,它只是检测到MotionEvent.ACTION_MOVE,例如,当我从上至下或从下至上滑动手指时,或者在任何方向上,它都将其检测为MotionEvent.ACTION_MOVE。有人可以帮我解决这个问题吗? 这是我的活动xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:show_buffering="when_playing" />

<ImageView
    android:id="@+id/imgChannellogo"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_gravity="center|center_vertical"
    android:visibility="invisible" />
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/brightness_slider_container"
    android:gravity="center"
    android:layout_marginTop="100dp"
    android:layout_marginBottom="100dp"
    android:visibility="gone">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/hplib_brightness_medium"
        android:id="@+id/brightnessIcon"/>
    <ProgressBar
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="10dp"
        android:layout_height="match_parent"
        android:max="100"
        android:progress="33"
        android:id="@+id/brightness_slider"
        android:progressDrawable="@drawable/hplib_verticalbar_design_brightness"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginBottom="0dp"
        android:visibility="visible" />
</LinearLayout>
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/brightness_center_text"
    android:gravity="center"
    android:visibility="gone"
    android:layout_centerHorizontal="true" >

    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/brightness_image"
        android:src="@drawable/hplib_brightness_minimum" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" 22"
        android:textSize="50dp"
        android:textStyle="bold"
        android:id="@+id/brigtness_perc_center_text"
        android:textColor="#FFF" />
</LinearLayout>


<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/volume_slider_container"
    android:gravity="center"
    android:layout_marginTop="100dp"
    android:layout_marginBottom="100dp"
    android:visibility="gone">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/hplib_volume"
        android:id="@+id/volIcon"/>
    <ProgressBar
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="10dp"
        android:layout_height="match_parent"
        android:max="100"
        android:progress="33"
        android:id="@+id/volume_slider"
        android:progressDrawable="@drawable/hplib_verticalbar_design_volume"
        android:layout_marginRight="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:visibility="visible" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/vol_center_text"
    android:layout_gravity="center"
    android:gravity="center"
    android:visibility="gone"
     >

    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/vol_image"
        android:src="@drawable/hplib_volume" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" 22"
        android:textSize="50dp"
        android:textStyle="bold"
        android:id="@+id/vol_perc_center_text"
        android:textColor="#FFF" />
</LinearLayout>


<LinearLayout
    android:id="@+id/layoutRunRadioInBackground"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_gravity="bottom"
    android:layout_marginBottom="80dp"
    android:gravity="center"
    android:visibility="invisible">

    <androidx.cardview.widget.CardView
        android:id="@+id/btnRunRadioInBackground"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:foreground="?attr/selectableItemBackground"
        app:cardBackgroundColor="@color/ui_yellow"
        app:cardCornerRadius="25dp">


    </androidx.cardview.widget.CardView>

</LinearLayout>


<com.google.android.gms.ads.AdView
    android:layout_gravity="bottom|center"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
</com.google.android.gms.ads.AdView>

这里是我的活动中的onTouchEvent方法

 @Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:


            Log.i("tag check","paien shodim");
            tested_ok=false;
            if (event.getX() < (sWidth / 2)) {
                intLeft = true;
                intRight = false;
            } else if (event.getX() > (sWidth / 2)) {
                intLeft = false;
                intRight = true;
            }
            int upperLimit = (sHeight / 4) + 100;
            int lowerLimit = ((sHeight / 4) * 3) - 150;
            if (event.getY() < upperLimit) {
                intBottom = false;
                intTop = true;
            } else if (event.getY() > lowerLimit) {
                intBottom = true;
                intTop = false;
            } else {
                intBottom = false;
                intTop = false;
            }
            seekSpeed = (TimeUnit.MILLISECONDS.toSeconds(player.getDuration()) * 0.1);
            diffX = 0;
            calculatedTime = 0;
            seekDur = String.format("%02d:%02d",TimeUnit.MILLISECONDS.toMinutes(diffX) -
                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(diffX)),TimeUnit.MILLISECONDS.toSeconds(diffX) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(diffX)));

            //TOUCH STARTED
            baseX = event.getX();
            baseY = event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            Log.i("tag check","move shodim");
            screen_swipe_move=true;
            if(controlsstate==ControlsMode.FULLCONTORLS){
                //root.setVisibility(View.GONE);
                diffX = (long) (Math.ceil(event.getX() - baseX));
                diffY = (long) Math.ceil(event.getY() - baseY);
                double brightnessspeed = 0.05;
                if (Math.abs(diffY) > MIN_disTANCE) {
                    tested_ok = true;
                }
                if (Math.abs(diffY) > Math.abs(diffX)) {
                    if (intLeft) {
                        cResolver = getContentResolver();
                        window = getwindow();
                        try {
                            Settings.System.putInt(cResolver,Settings.System.SCREEN_BRIGHTnesS_MODE,Settings.System.SCREEN_BRIGHTnesS_MODE_MANUAL);
                            brightness = Settings.System.getInt(cResolver,Settings.System.SCREEN_BRIGHTnesS);
                        } catch (Settings.SettingNotFoundException e) {
                            e.printstacktrace();
                        }
                        int new_brightness = (int) (brightness - (diffY * brightnessspeed));
                        if (new_brightness > 250) {
                            new_brightness = 250;
                        } else if (new_brightness < 1) {
                            new_brightness = 1;
                        }
                        double brightPerc = Math.ceil((((double) new_brightness / (double) 250) * (double) 100));
                        brightnessBarContainer.setVisibility(View.VISIBLE);
                        brightness_center_text.setVisibility(View.VISIBLE);
                        brightnessBar.setProgress((int) brightPerc);
                        if (brightPerc < 30) {
                            brightnessIcon.setimageResource(R.drawable.hplib_brightness_minimum);
                            brightness_image.setimageResource(R.drawable.hplib_brightness_minimum);
                        } else if (brightPerc > 30 && brightPerc < 80) {
                            brightnessIcon.setimageResource(R.drawable.hplib_brightness_medium);
                            brightness_image.setimageResource(R.drawable.hplib_brightness_medium);
                        } else if (brightPerc > 80) {
                            brightnessIcon.setimageResource(R.drawable.hplib_brightness_maximum);
                            brightness_image.setimageResource(R.drawable.hplib_brightness_maximum);
                        }
                        brigtness_perc_center_text.setText(" " + (int) brightPerc);
                        Settings.System.putInt(cResolver,Settings.System.SCREEN_BRIGHTnesS,(new_brightness));
                        WindowManager.LayoutParams layoutpars = window.getAttributes();
                        layoutpars.screenBrightness = brightness / (float) 255;
                        window.setAttributes(layoutpars);
                    }else if (intRight) {
                        vol_center_text.setVisibility(View.VISIBLE);
                        mediavolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                        int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                        double cal = (double) diffY * ((double)maxVol/(double)(device_height*4));
                        int newMediaVolume = mediavolume - (int) cal;
                        if (newMediaVolume > maxVol) {
                            newMediaVolume = maxVol;
                        } else if (newMediaVolume < 1) {
                            newMediaVolume = 0;
                        }
                        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,newMediaVolume,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
                        double volPerc = Math.ceil((((double) newMediaVolume / (double) maxVol) * (double) 100));
                        vol_perc_center_text.setText(" " + (int) volPerc);
                        if (volPerc < 1) {
                            volIcon.setimageResource(R.drawable.hplib_volume_mute);
                            vol_image.setimageResource(R.drawable.hplib_volume_mute);
                            vol_perc_center_text.setVisibility(View.GONE);
                        } else if (volPerc >= 1) {
                            volIcon.setimageResource(R.drawable.hplib_volume);
                            vol_image.setimageResource(R.drawable.hplib_volume);
                            vol_perc_center_text.setVisibility(View.VISIBLE);
                        }
                        volumeBarContainer.setVisibility(View.VISIBLE);
                        volumeBar.setProgress((int) volPerc);
                    }
                }else if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > (MIN_disTANCE + 100)) {
                        tested_ok = true;
                       // root.setVisibility(View.VISIBLE);
                        //seekBar_center_text.setVisibility(View.VISIBLE);
                       // onLyseekbar.setVisibility(View.VISIBLE);
                       // top_controls.setVisibility(View.GONE);
                        //bottom_controls.setVisibility(View.GONE);
                        String totime = "";
                        calculatedTime = (int) ((diffX) * seekSpeed);
                        if (calculatedTime > 0) {
                            seekDur = String.format("[ +%02d:%02d ]",TimeUnit.MILLISECONDS.toMinutes(calculatedTime) -
                                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(calculatedTime)),TimeUnit.MILLISECONDS.toSeconds(calculatedTime) -
                                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(calculatedTime)));
                        } else if (calculatedTime < 0) {
                            seekDur = String.format("[ -%02d:%02d ]",Math.abs(TimeUnit.MILLISECONDS.toMinutes(calculatedTime) -
                                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(calculatedTime))),Math.abs(TimeUnit.MILLISECONDS.toSeconds(calculatedTime) -
                                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(calculatedTime))));
                        }
                        totime = String.format("%02d:%02d",TimeUnit.MILLISECONDS.toMinutes(player.getCurrentPosition() + (calculatedTime)) -
                                        TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(player.getCurrentPosition() + (calculatedTime))),// The change is in this line
                                TimeUnit.MILLISECONDS.toSeconds(player.getCurrentPosition() + (calculatedTime)) -
                                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(player.getCurrentPosition() + (calculatedTime))));
                        txt_seek_secs.setText(seekDur);
                        txt_seek_currTime.setText(totime);
                       // seekBar.setProgress((int) (player.getCurrentPosition() + (calculatedTime)));
                    }
                }
            }
            break;
        case MotionEvent.ACTION_CANCEL:
            Log.i("tag check","cancel shodim");
        case MotionEvent.ACTION_UP:
            Log.i("tag check","up shodim");
            screen_swipe_move=false;
            tested_ok = false;

            //seekBar_center_text.setVisibility(View.GONE);
            brightness_center_text.setVisibility(View.GONE);
            vol_center_text.setVisibility(View.GONE);
            brightnessBarContainer.setVisibility(View.GONE);
            volumeBarContainer.setVisibility(View.GONE);
           // onLyseekbar.setVisibility(View.VISIBLE);
            //top_controls.setVisibility(View.VISIBLE);
           // bottom_controls.setVisibility(View.VISIBLE);
          //  root.setVisibility(View.VISIBLE);
            calculatedTime = (int) (player.getCurrentPosition() + (calculatedTime));
            player.seekTo(calculatedTime);
           // showControls();
            break;

    }
    return super.onTouchEvent(event);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)