【问题标题】:How can I change the TextView's content by swiping horizontally?如何通过水平滑动来更改 TextView 的内容?
【发布时间】:2020-08-11 15:09:41
【问题描述】:

我目前正在开发一个有声读物应用程序。如果这本书有音频,将显示控制器。如果没有,它只会显示文本。我想通过滑动文本来切换章节。我目前使用的是RelativeLayout,文本被包裹在ScrollView 中。我读到我应该使用 ViewPager。但我想知道我是否可以继续使用 RelativeLayout 和 ScrollView。

player.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/mainbg">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/m_tab_color"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    <LinearLayout
        android:id="@+id/player_footer_bg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#FFFFFF"
        android:gravity="center"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/linearButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp">

            <ImageButton
                android:id="@+id/btnRepeat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:background="@null"
                android:src="@drawable/btn_repeat"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnShuffle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:background="@null"
                android:src="@drawable/btn_shuffle"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnNext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerVertical="true"
                android:layout_toEndOf="@+id/btnPlay"
                android:background="@null"
                android:src="@drawable/btn_next"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnPlay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_margin="5dp"
                android:background="@drawable/btn_play"
                android:src="@drawable/pause"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnPrevious"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toStartOf="@+id/btnPlay"
                android:background="@null"
                android:src="@drawable/btn_prev"
                tools:ignore="ContentDescription" />

        </RelativeLayout>

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

            <FrameLayout
                android:id="@+id/ad_view_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <RelativeLayout
                android:id="@+id/ads_startapp"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:visibility="gone">

            </RelativeLayout>

        </LinearLayout>

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/sec_ssekbar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/player_footer_bg"
        android:layout_centerVertical="true"
        android:background="#00ffffff"
        android:paddingLeft="7dp"
        android:paddingRight="7dp">

        <SeekBar
            android:id="@+id/songProgressBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:progressTint="#E94C3D"
            android:thumb="@drawable/pointer"
            android:thumbTint="#E94C3D"
            android:thumbOffset="8dp"/>

        <TextView
            android:id="@+id/songCurrentDurationLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/songProgressBar"
            android:gravity="start"
            android:text="@string/current_duration"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/songTotalDurationLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_below="@+id/songProgressBar"
            android:gravity="end"
            android:text="@string/total_duration"
            android:textColor="@color/black"
            android:textStyle="bold" />

    </RelativeLayout>

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/sec_ssekbar"
        android:layout_below="@+id/toolbar"
        android:layout_centerInParent="true"
        android:layout_marginStart="3dp"
        android:layout_marginTop="3dp"
        android:layout_marginEnd="3dp"
        android:layout_marginBottom="3dp"
        android:background="#B3FFFFFF">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/text_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_marginTop="3dp"
                android:layout_marginEnd="5dp"
                android:layout_marginBottom="3dp"
                android:gravity="center"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/black"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/text_description"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_marginTop="5dp"
                android:layout_marginEnd="5dp"
                android:layout_marginBottom="5dp"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/black" />

        </LinearLayout>

    </ScrollView>

</RelativeLayout>

MusicPlayActivity.java

public class MusicPlayActivity extends AppCompatActivity implements OnCompletionListener, SeekBar.OnSeekBarChangeListener {

    Toolbar toolbar;
    private ImageButton btnPlay;
    private ImageButton btnRepeat;
    private ImageButton btnShuffle;
    private MediaPlayer mp;
    ImageView img_song;
    private int currentSongIndex = 0;
    private boolean isShuffle = false;
    private boolean isRepeat = false;
    String[] allArrayImage, allArrayMusicCatName, allArrayMusicShare;
    String[] allArrayMusicId, allArrayMusicCatId, allArrayMusicurl, allArrayMusicName, allArrayMusicDuration, allArrayMusicDesc;
    int position = currentSongIndex;
    int music_id;
    private SeekBar songProgressBar;
    private TextView songCurrentDurationLabel;
    private TextView songTotalDurationLabel;
    private Utilities utils;
    private Handler mHandler = new Handler();
    private Menu menu;

    DatabaseHandler db;
    String mp3id, mp3catid, mp3name, mp3url, mp3duration, mp3desc, mp3shareurl, mp3image, mp3catname;

    private ActionClickItem actionClickItem;
    private InterstitialAd mInterstitialAd;
    private int btNextClicked = 1;
    private AdsObj adsObj;
    private StartAppAd startAppAd;
    private boolean runClickExecuted;

    private AdView adView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.player);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });

        btnPlay = findViewById(R.id.btnPlay);
        ImageButton btnNext = findViewById(R.id.btnNext);
        ImageButton btnPrevious = findViewById(R.id.btnPrevious);
        btnRepeat = findViewById(R.id.btnRepeat);
        btnShuffle = findViewById(R.id.btnShuffle);
        TextView songTitleLabel = findViewById(R.id.text_title);
        TextView songDesc = findViewById(R.id.text_description);
        img_song = findViewById(R.id.image);
        songProgressBar = findViewById(R.id.songProgressBar);
        songCurrentDurationLabel = findViewById(R.id.songCurrentDurationLabel);
        songTotalDurationLabel = findViewById(R.id.songTotalDurationLabel);

        //imageView = (ImageView)findViewById(R.id.full_image);

//      imageLoader=new ImageLoader(this);

        db = new DatabaseHandler(this);

        toolbar = this.findViewById(R.id.toolbar);
        toolbar.setTitle(Constant.MUSIC_NAME);
        this.setSupportActionBar(toolbar);

        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        utils = new Utilities();
        mp = new MediaPlayer();
        Intent i = getIntent();
        music_id = i.getIntExtra("POSITION", 0);
        allArrayImage = i.getStringArrayExtra("MP3_IMAGE");
        allArrayMusicCatName = i.getStringArrayExtra("MP3_CATNAME");
        allArrayMusicShare = i.getStringArrayExtra("MP3_SHARE");
        allArrayMusicId = i.getStringArrayExtra("MP3_CID");
        allArrayMusicCatId = i.getStringArrayExtra("MP3_CATID");
        allArrayMusicurl = i.getStringArrayExtra("MP3_URL");
        allArrayMusicName = i.getStringArrayExtra("MP3_NAME");
        allArrayMusicDuration = i.getStringArrayExtra("MP3_DURATION");
        allArrayMusicDesc = i.getStringArrayExtra("MP3_DISCRIPTION");

        position = getPositionFromArray(String.valueOf(music_id));
        Log.e("POSITIO", "" + position);
        playSong(position);
        songProgressBar.setOnSeekBarChangeListener(this);
        mp.setOnCompletionListener(this);

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // check for already playing
                if (mp.isPlaying()) {
                    if (mp != null) {
                        mp.pause();
                        // Changing button image to play button
                        btnPlay.setImageResource(R.drawable.btn_play);
                    }
                } else {
                    // Resume song
                    if (mp != null) {
                        mp.start();
                        // Changing button image to pause button
                        btnPlay.setImageResource(R.drawable.btn_paush);
                    }
                }
            }
        });


        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                btNextClicked++;
                if ((btNextClicked % 3 == 0)) {
                    actionItemClicked(new ActionClickItem() {
                        @Override
                        public void runClick() {
                            // check if next song is there or not
                            if (position < (allArrayMusicurl.length - 1)) {
                                playSong(position + 1);
                                position = position + 1;
                            } else {
                                // play first song
                                playSong(0);
                                position = 0;
                            }
                        }
                    });
                } else {
                    // check if next song is there or not
                    if (position < (allArrayMusicurl.length - 1)) {
                        position = position + 1;
                        playSong(position + 1);
                    } else {
                        // play first song
                        playSong(0);
                        position = 0;
                    }
                }
            }
        });

        btnPrevious.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (position > 0) {
                    playSong(position - 1);
                    position = position - 1;
                } else {
                    // play last song
                    playSong(allArrayMusicurl.length - 1);
                    position = allArrayMusicurl.length - 1;
                }
            }
        });

        btnRepeat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (isRepeat) {
                    isRepeat = false;
                    Toast.makeText(getApplicationContext(), "Repeat is OFF", Toast.LENGTH_SHORT).show();
                    btnRepeat.setImageResource(R.drawable.btn_repeat);
                } else {
                    // make repeat to true
                    isRepeat = true;
                    Toast.makeText(getApplicationContext(), "Repeat is ON", Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isShuffle = false;
                    btnRepeat.setImageResource(R.drawable.btn_repeat_focused);
                    btnShuffle.setImageResource(R.drawable.btn_shuffle);
                }
            }
        });

        btnShuffle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (isShuffle) {
                    isShuffle = false;
                    Toast.makeText(getApplicationContext(), "Shuffle is OFF", Toast.LENGTH_SHORT).show();
                    btnShuffle.setImageResource(R.drawable.btn_shuffle);
                } else {
                    // make repeat to true
                    isShuffle = true;
                    Toast.makeText(getApplicationContext(), "Shuffle is ON", Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isRepeat = false;
                    btnShuffle.setImageResource(R.drawable.btn_shuffle_focused);
                    btnRepeat.setImageResource(R.drawable.btn_repeat);
                }
            }
        });

        //int songIndex = i.getIntExtra("songIndex", 0);
        // Displaying Song title
        String songTitle = allArrayMusicName[position];
        songTitleLabel.setText(songTitle);
        toolbar.setTitle(songTitle);

        String musicUrl = allArrayMusicurl[position];
        if(musicUrl.equals(".")){
            songProgressBar.setVisibility(View.GONE);
            songCurrentDurationLabel.setVisibility(View.GONE);
            songTotalDurationLabel.setVisibility(View.GONE);

            RelativeLayout linearButton = findViewById(R.id.linearButton);
            linearButton.setVisibility(View.GONE);
        }

        @SuppressLint("CutPasteId") FrameLayout frameAds1 = findViewById(R.id.ad_view_container);
        AdsAssistants adsAssistants = new AdsAssistants(this);
        adsObj = adsAssistants.getSessionAdsObj();

        if (adsObj != null) {
            if (adsObj.getCurrentActivatedAds().equals(AdsConfig.ADS_ADMOB)) {
                frameAds1.setVisibility(View.VISIBLE);

                adsAssistants.createAdmobBanner(frameAds1, adsObj.getADS_ADMOB_BANNER());
            } else {
                startAppAd = new StartAppAd(this);

                @SuppressLint("CutPasteId") FrameLayout frameAds = findViewById(R.id.ad_view_container);
                frameAds.setVisibility(View.VISIBLE);

                adsAssistants.createStartAppBanner(frameAds);
            }
        }
    }

    public void actionItemClicked(ActionClickItem actionClickItemParam) {
        actionClickItem = actionClickItemParam;
        if (adsObj == null) {
            actionClickItem.runClick();
        } else {
            if (adsObj.getCurrentActivatedAds().equals(AdsConfig.ADS_ADMOB)) {
                if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    actionClickItem.runClick();
                    generateInterstitialAd();
                }
            } else {
                startAppAd.loadAd(new AdEventListener() {
                    @Override
                    public void onReceiveAd(Ad ad) {
                    }
                    @Override
                    public void onFailedToReceiveAd(Ad ad) {
//                    actionClickItem.runClick();
                    }
                });

                StartAppAd.disableAutoInterstitial();
                startAppAd.showAd(new AdDisplayListener() {
                    @Override
                    public void adHidden(Ad ad) {
                        if(!runClickExecuted){
                            runClickExecuted = true;
                            actionClickItem.runClick();
                        }
                        Log.d("YWV", "Action clicked");
                    }

                    @Override
                    public void adDisplayed(Ad ad) {
                    }

                    @Override
                    public void adClicked(Ad ad) {
                    }

                    @Override
                    public void adNotDisplayed(Ad ad) {
                    }
                });
            }
        }
    }

    private void generateInterstitialAd() {
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(adsObj.getADS_ADMOB_INTERSTITIALS());
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
//                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdFailedToLoad(int errorCode) {
//                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdClosed() {
                // Proceed to the next level.
                //finish();
                //showDialogApp();
                actionClickItem.runClick();
                generateInterstitialAd();
            }
        });
        AdRequest adRequestIn = new AdRequest.Builder().build();
        mInterstitialAd.loadAd(adRequestIn);
    }

    @Override
    protected void onActivityResult(int requestCode,
                                    int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 100) {
            position = Objects.requireNonNull(data.getExtras()).getInt("songIndex");
            // play selected song
            playSong(position);

        }else if(resultCode == 11){
            runClickExecuted = false;
        }
    }

    public void playSong(int songIndex) {
        // Play song
        try {
//          if(needResetFirst){
            mp.reset();
//          }
            mp.setDataSource(allArrayMusicurl[songIndex]);
            mp.prepare();
            mp.start();

//            // Displaying Song title
            TextView songTitleLabel = findViewById(R.id.text_title);
            String songTitle = allArrayMusicName[songIndex];
            songTitleLabel.setText(songTitle);
            toolbar.setTitle(songTitle);

            TextView songDesc = findViewById(R.id.text_description);
            String songDescd = allArrayMusicDesc[songIndex];
            songDesc.setText(songDescd);

            //          Toast.makeText(getApplicationContext(), img_name,Toast.LENGTH_SHORT).show();

//          imageLoader.DisplayImage(Constant.SERVER_IMAGE_UPFOLDER1+img_name, imageView);
//          Log.e("IMAGEPATH", ""+Constant.SERVER_IMAGE_UPFOLDER1+img_name);
//          Toast.makeText(getApplicationContext(), Constant.SERVER_IMAGE_UPFOLDER1+img_name,Toast.LENGTH_SHORT).show();

            // Changing Button Image to pause image
            btnPlay.setImageResource(R.drawable.btn_paush);

            songProgressBar.setProgress(0);
            songProgressBar.setMax(100);

            // Updating progress bar
            updateProgressBar();

            // set Progress bar values
        } catch (IllegalArgumentException | IllegalStateException | IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCompletion(MediaPlayer arg0) {
        // check for repeat is ON or OFF
        if (isRepeat) {
            // repeat is on play same song again
            playSong(position);
        } else if (isShuffle) {
            // shuffle is on - play a random song
            Random rand = new Random();
            position = rand.nextInt((allArrayMusicurl.length - 1) + 1);
            playSong(position);
        } else {
            // no repeat or shuffle ON - play next song
            if (position < (allArrayMusicurl.length - 1)) {
                playSong(position + 1);
                position = position + 1;
            } else {
                // play first song
                playSong(0);
                position = 0;
            }
        }
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        if (mp != null) {
            mp.reset();
            mp.release();
            mp = null;
            mHandler.removeCallbacks(mUpdateTimeTask);
        }
        setResult(RESULT_OK);
        finish();
    }

    public void updateProgressBar() {
        mHandler.postDelayed(mUpdateTimeTask, 100);
    }

    private Runnable mUpdateTimeTask = new Runnable() {
        public void run() {
            long totalDuration = mp.getDuration();
            long currentDuration = mp.getCurrentPosition();

            // Displaying Total Duration time
            songTotalDurationLabel.setText(utils.milliSecondsToTimer(totalDuration));
            // Displaying time completed playing
            songCurrentDurationLabel.setText(utils.milliSecondsToTimer(currentDuration));

            // Updating progress bar
            int progress = utils.getProgressPercentage(currentDuration, totalDuration);
            //Log.d("Progress", ""+progress);
            songProgressBar.setProgress(progress);

            // Running this thread after 100 milliseconds
            mHandler.postDelayed(this, 100);
        }
    };

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // remove message Handler from updating progress bar
        mHandler.removeCallbacks(mUpdateTimeTask);
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        mHandler.removeCallbacks(mUpdateTimeTask);
        int totalDuration = mp.getDuration();
        int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration);

        // forward or backward to certain seconds

        mp.seekTo(currentPosition);

        // update timer progress again
        updateProgressBar();
    }

    public void AddtoFav(int position) {
        mp3id = allArrayMusicId[position];
        //      mp3catid=allArrayMusicCatId[position];
        mp3catname = allArrayMusicCatName[position];
        mp3url = allArrayMusicurl[position];
        mp3image = allArrayImage[position];
        mp3name = allArrayMusicName[position];
        mp3duration = allArrayMusicDuration[position];
        mp3desc = allArrayMusicDesc[position];
        //      mp3shareurl=allArrayMusicShare[position];

        db.AddtoFavorite(new Pojo(mp3id, mp3catid, mp3catname, mp3url, mp3image, mp3name, mp3duration, mp3desc, mp3shareurl));
        Toast.makeText(getApplicationContext(), "Added to Favorite", Toast.LENGTH_SHORT).show();
        //      fabfav.setImageDrawable(getResources().getDrawable(R.drawable.fav_hover));

    }

    //remove from favorite
    public void RemoveFav(int position) {
        mp3id = allArrayMusicId[position];
        db.RemoveFav(new Pojo(mp3id));
        Toast.makeText(getApplicationContext(), "Removed from Favorite", Toast.LENGTH_SHORT).show();
        //      fabfav.setImageDrawable(getResources().getDrawable(R.drawable.fav_hover));
    }

    public void FirstFav() {
        mp3id = allArrayMusicId[position];
        List<Pojo> pojolist = db.getFavRow(mp3id);
        if (pojolist.size() == 0) {
            menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav));
        } else {
            if (pojolist.get(0).getMp3Id().equals(mp3id)) {
                menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav_hover));
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_mp3, menu);
        this.menu = menu;
        //for when 1st item of view pager is favorite mode
        FirstFav();
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            case R.id.menu_fav:
                mp3id = allArrayMusicId[position];
                List<Pojo> pojolist = db.getFavRow(mp3id);
                if (pojolist.size() == 0) {
                    AddtoFav(position);//if size is zero i.e means that record not in database show add to favorite
                    menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav_hover));
                } else {
                    if (pojolist.get(0).getMp3Id().equals(mp3id)) {
                        RemoveFav(position);
                    }
                    menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav));
                }
                return true;
            case R.id.menu_share:
                Intent sharingIntent = new Intent(Intent.ACTION_SEND);
                sharingIntent.putExtra(Intent.EXTRA_TEXT, "Listen to this verse from " + Constant.APP_NAME + "\n" + "http://play.google.com/store/apps/details?id=" + getPackageName());
                sharingIntent.setType("text/plain");
                startActivity(Intent.createChooser(sharingIntent, "Share Link"));
                return true;
            default:
                return super.onOptionsItemSelected(menuItem);
        }
    }

    public int getPositionFromArray(String id) {
        return Arrays.asList(allArrayMusicId).indexOf(id);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (adView != null) {
            adView.resume();
        }
    }

    /** Called when leaving the activity */
    @Override
    public void onPause() {
        if (adView != null) {
            adView.pause();
        }
        super.onPause();
    }
    /** Called before the activity is destroyed */
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mp != null) {
            mp.reset();
            mp.release();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mp = null;
        }
        finish();
        if (adView != null) {
            adView.destroy();
        }
    }
}

提前谢谢你!

【问题讨论】:

    标签: java android xml android-studio


    【解决方案1】:

    您可以通过将onTouchListener 附加到任何视图上来检测手势。

    但是,在您的情况下,您正在尝试检测滑动手势,因此最好的解决方案是通过扩展 onTouchListener 来创建手势检测器类,如本教程中 (步骤 4)

    https://www.tutorialspoint.com/how-to-handle-right-to-left-and-left-to-right-swipe-gestures-on-android

    完成此操作后,您可以轻松地将 swipe-detector 类附加到您的任何视图:

    textView.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) {
                 @Override
                 public void onSwipeLeft() {
                    super.onSwipeLeft();
                    // do something
                 }
                 @Override
                 public void onSwipeRight() {
                    super.onSwipeRight();
                    // do something
                 }
              });
    

    【讨论】:

    • 谢谢。我试过了,但它的工作原理有点警告
    【解决方案2】:

    您是否尝试过像这里https://stackoverflow.com/a/12938787/4330467 这样添加和 OnSwipeTouchListener? 相对布局不应该是问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2013-05-05
      • 2013-08-13
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多