penguins.jpg
0.26MB
landscape.jpg
0.06MB
koala.jpg
0.26MB
1)activity_main.xml
2)
3)MainActivity
package kr.android.s34viewflippertouchdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
ViewFlipper flipper;
//터치 이벤트 발생 지점의 x좌표 저장
float down_x;//터치하는 순간
float up_x;//터치를 떄는 순간
int[] imageItems;
ImageView image1, image2;
int num;
int cnt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageItems = new int[]{R.drawable.koala,R.drawable.landscape,R.drawable.penguins};
flipper = (ViewFlipper)findViewById(R.id.flipper);
//처음부터 많은 ViewFlipper를 등록하면 buffer오버플로우 현상이 일어나기 때문에 ImageView는 두개만 생성한다.
//그리고 이벤트가 발생하면 두개의 ImageView에 이미지를 교체삽입하는 방식으로 처리해서
//오버플로우 현상을 방지한다..
image1 = new ImageView(this);
image1.setImageResource(imageItems[0]);
flipper.addView(image1,new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,//넓이
ViewGroup.LayoutParams.MATCH_PARENT));//높이
image2 = new ImageView(this);
flipper.addView(image2,new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,//넓이
ViewGroup.LayoutParams.MATCH_PARENT));//높이
//이벤트 연결
flipper.setOnTouchListener(this);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//터치 이벤트가 일어난 뷰가 ViewFliipper가 아니면 return false
if(view != flipper)return false;
if(motionEvent.getAction() == motionEvent.ACTION_DOWN){
//터지 시작 지점 x좌표 저장
down_x = motionEvent.getX();
}else if(motionEvent.getAction() == motionEvent.ACTION_UP){
//터치를 때는 지점 x좌표 저장
up_x = motionEvent.getX();
//터치 방향 지정
if(up_x < down_x){//터치할 때 왼쪽 방향으로 진행
flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_out));
if(++num == imageItems.length) num = 0;
if(++cnt%2==1){
image2.setImageResource(imageItems[num]);
}else{
image1.setImageResource(imageItems[num]);
}
flipper.showNext();
}else if(down_x < up_x){//터치할 때 오른쪽 방향으로 진행
flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
if(--num == -1) num = imageItems.length-1;
if(++cnt%2==1){
image2.setImageResource(imageItems[num]);
}else{
image1.setImageResource(imageItems[num]);
}
flipper.showPrevious();
}
}
return true;
}
}
반응형
'IT > Android Studio' 카테고리의 다른 글
s35WebViewDemo01 (0) | 2020.07.07 |
---|---|
s34ViewFilpperTouchDemo 터치 슬라이드 애니메이션으로 다음사진 보기 (0) | 2020.07.06 |
s33ViewFilpperDemo 갤러리 다음사진 보기 (0) | 2020.07.03 |
Android Studio s26ListViewDemo04 (삭제 기능 ) (0) | 2020.07.02 |
Android Studio s25ListViewDemo03 (삭제 기능 ) (0) | 2020.07.02 |