SwipeGestureDetector меняет изображение с int [] на изображение (сверху и снизу) - PullRequest
0 голосов
/ 05 марта 2019

Мне нужно взять изображение из массива int и показать его затем в Imageview, когда я проведу пальцем снизу вверх и сверху вниз.

GestureDetector работает хорошо, но я хочу взять изображение из int [] и поместить его в Imageview при пролистывании.

Пример:

int [] imageBank = new int[] {
            R.drawable.image0,
            R.drawable.image1,
            R.drawable.image2,
            R.drawable.image3,
            R.drawable.image4, }; 

Проведите сверху вниз, взять изображение 0 из [], показать в Imageview

Проведите сверху вниз, взять изображение 1 из [], показать в Imageview

Проведите снизу вверх, взять изображение 0 из [], показать в Imageview

Проведите снизу вверх, взять изображение 4 из [], показать в Imageview

Полная основная активность

import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import driss.moodtracker.R;
import driss.moodtracker.component.SwipeGestureDetector;


public class MainActivity extends AppCompatActivity {



private SwipeGestureDetector gestureDetector;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gestureDetector = new SwipeGestureDetector(this);

    Button button_comment = (Button) findViewById(R.id.button1);
    Button button_calendar = (Button) findViewById(R.id.button2);
}



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



public void onSwipe(SwipeGestureDetector.SwipeDirection direction) {

    ImageView imagePic = (ImageView) findViewById(R.id.imageview);
    ConstraintLayout currentLayout = (ConstraintLayout) findViewById(R.id.main_layout);


    // ARRAY OF SMILEYS LIST

    int [] arraySmileys = new int[] {
            R.drawable.smiley_super_happy,
            R.drawable.smiley_happy,
            R.drawable.smiley_normal,
            R.drawable.smiley_disappointed,
            R.drawable.smiley_sad,
    };


   //  HOW CAN I DO ?

    String message = "";
    switch (direction) {
        case LEFT_TO_RIGHT:
            message = "Left to right swipe";
            break;
        case RIGHT_TO_LEFT:
            message = "Right to left swipe";
            break;
        case TOP_TO_BOTTOM:
            imagePic.setImageResource(R.drawable.smiley_disappointed);
            currentLayout.setBackgroundResource(R.color.faded_red);
            message = "Top to bottom swipe";
            break;
        case BOTTOM_TO_TOP:
            currentLayout.setBackgroundResource(R.color.light_sage);
            imagePic.setImageResource(R.drawable.smiley_super_happy);
            message = " Bottom to top swipe";
            break;

    }
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}


}

Спасибо вам за помощь

Новый студент.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Лучше использовать ViewPager или RecyclerView с ViewPager -подобным поведением вместо GestureDetector

0 голосов
/ 05 марта 2019

Определите «счетчик» (целочисленную переменную) для хранения индекса вашего целочисленного массива. Теперь, основываясь на обнаруженном пролистывании, если пользователь проведет пальцем снизу вверх, увеличит счетчик и установит изображение этого индексного элемента в ваше изображение, и наоборот - снизу вверх.

Пример кода:

int counter = 0;

public void swipe() {
    switch (direction) {
    case LEFT_TO_RIGHT:
        message = "Left to right swipe";
        break;

    case RIGHT_TO_LEFT:
        message = "Right to left swipe";
        break;

    case TOP_TO_BOTTOM:
        if(counter > 0) {
            counter--;
            imagePic.setImageResource(arraySmileys[counter]);
        }
        break;

    case BOTTOM_TO_TOP:
        if(counter < arraySmileys.length()) {
            counter++;
            imagePic.setImageResource(arraySmileys[counter]);
        }
        break;
   }
}
...