Android 는 제스처 를 통 해 문제 풀이 기 페이지 넘 기기 효 과 를 실현 합 니 다.
1.효과 도
2.사고의 실현
Activity 의 Touch Event 이 벤트 를 Gesture Detector 에 맡 긴 다음 ViewFilpper 를 사용 하여 여러 구성 요소 간 전환 효 과 를 애니메이션 으로 제어 합 니 다.손짓 하 는 Api 는 자세히 말 하지 않 겠 습 니 다.여러분 이 모 르 면 알 아 보 세 요.
3.실현 의 절차
1)제스처 감지 기 구축
2)、데이터 준비
3),ViewFilpper 에 하위 컨트롤 을 추가 합 니 다.
4)、애니메이션 배열 초기 화
5)、Activity 의 TouchEvent 사건 을 Gesture Detector 에 맡 겨 처리
6),onFling 방법 실현
4.코드 구현
4.1 레이아웃 파일
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.lidong.demo.view.GestureFilpActivity">
<ViewFlipper
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewFlipper"/>
</LinearLayout>
4.2 애니메이션 파일left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="500" />
</set>
left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="500" />
</set>
right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="500" />
</set>
right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="500" />
</set>
4.3 Gesture Filp Activity 의 실현
package com.lidong.demo.view;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import com.lidong.demo.AppComponent;
import com.lidong.demo.BaseActivity;
import com.lidong.demo.R;
import com.lidong.demo.view.adapter.ChineseMedicineReportAdapter;
import com.lidong.demo.view.model.Question;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
*@ : GestureFilpActivity
*@ :
*@ : 2016/5/3 16:11
*@ :
*@ : [email protected]
*@company: chni
*/
public class GestureFilpActivity extends BaseActivity implements GestureDetector.OnGestureListener{
@Bind(R.id.viewFlipper)
ViewFlipper mViewFlipper;
//1.
GestureDetector mGestureDetector;
//2. , ViewFilpper 。
Animation[] animations = new Animation[4];
//3.
final int FLIP_DISTANCE = 50 ;
List<Question> mQuestion = new ArrayList<>();
ChineseMedicineReportAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_filp);
ButterKnife.bind(this);
setActivityTitle(" ");
//1.
mGestureDetector = new GestureDetector(this,this);
//2
List<Question> questions = initData();
mQuestion.addAll(questions);
//3. ViewFilpper 。
for (int i = 0;i<mQuestion.size();i++){
Question question = mQuestion.get(i);
mViewFlipper.addView(addQuestionView(question));
}
//4. Animation
animations[0] = AnimationUtils.loadAnimation(this,R.anim.left_in);
animations[1] = AnimationUtils.loadAnimation(this,R.anim.left_out);
animations[2] = AnimationUtils.loadAnimation(this,R.anim.right_in);
animations[3] = AnimationUtils.loadAnimation(this,R.anim.right_out);
}
@Override
protected void setupActivityComponent(AppComponent appComponent) {
}
private View addQuestionView(Question question){
View view = View.inflate(this, R.layout.activity_chnihealthreport, null);
TextView tes = (TextView) view.findViewById(R.id.tv_question);
ListView listview = (ListView) view.findViewById(R.id.lv_question_answer);
adapter = new ChineseMedicineReportAdapter(this,question);
listview.setAdapter(adapter);
tes.setText(question.getQuestion());
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(GestureFilpActivity.this,position+"",Toast.LENGTH_SHORT).show();
Toast.makeText(GestureFilpActivity.this,position+"",Toast.LENGTH_SHORT).show();
if (mViewFlipper.getDisplayedChild() == mQuestion.size() - 1) {
Toast.makeText(GestureFilpActivity.this," ",Toast.LENGTH_SHORT).show();
mViewFlipper.stopFlipping();
return;
}else {
mViewFlipper.setInAnimation(animations[0]);
mViewFlipper.setOutAnimation(animations[1]);
mViewFlipper.showNext();
}
}
});
return view;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
//
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX()>FLIP_DISTANCE){
if (mViewFlipper.getDisplayedChild() == 0) {
mViewFlipper.stopFlipping();
Toast.makeText(GestureFilpActivity.this," ",Toast.LENGTH_SHORT).show();
return false;
} else {
mViewFlipper.setInAnimation(animations[2]);
mViewFlipper.setOutAnimation(animations[3]);
mViewFlipper.showPrevious();
return true;
}
}else if (e1.getX() - e2.getX()>FLIP_DISTANCE){
if (mViewFlipper.getDisplayedChild() == mQuestion.size() - 1) {
Toast.makeText(GestureFilpActivity.this," ",Toast.LENGTH_SHORT).show();
mViewFlipper.stopFlipping();
return false;
}else {
mViewFlipper.setInAnimation(animations[0]);
mViewFlipper.setOutAnimation(animations[1]);
mViewFlipper.showNext();
return true;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Activity GestureDetector
return this.mGestureDetector.onTouchEvent(event);
}
private List<Question> initData(){
List<Question> questions = new ArrayList<>();
Question q1 = new Question();
q1.setQuestion("1、\" \" :");
List<Question.Answer> mA = new ArrayList<>();
Question.Answer a1 = new Question.Answer();
a1.setAnswerMessage("A《 》");
Question.Answer a2 = new Question.Answer();
a2.setAnswerMessage("B《 》");
Question.Answer a3 = new Question.Answer();
a3.setAnswerMessage("C《 》");
Question.Answer a4 = new Question.Answer();
a4.setAnswerMessage("D《 》");
mA.add(a1);
mA.add(a2);
mA.add(a3);
mA.add(a4);
q1.setAnswer(mA);
questions.add(q1);
Question q2 = new Question();
q2.setQuestion("2. :");
List<Question.Answer> mB = new ArrayList<>();
Question.Answer b1 = new Question.Answer();
b1.setAnswerMessage("A《 》");
Question.Answer b2 = new Question.Answer();
b2.setAnswerMessage("B《 》");
Question.Answer b3 = new Question.Answer();
b3.setAnswerMessage("C《 》");
Question.Answer b4 = new Question.Answer();
b4.setAnswerMessage("D《 》");
mB.add(b1);
mB.add(b2);
mB.add(b3);
mB.add(b4);
q2.setAnswer(mB);
questions.add(q2);
Question q3= new Question();
q3.setQuestion("3. :( A)");
List<Question.Answer> mC = new ArrayList<>();
Question.Answer c1 = new Question.Answer();
c1.setAnswerMessage("A《 》");
Question.Answer c2 = new Question.Answer();
c2.setAnswerMessage("B《 》");
Question.Answer c3 = new Question.Answer();
c3.setAnswerMessage("C《 》");
Question.Answer c4 = new Question.Answer();
c4.setAnswerMessage("D《 》");
mC.add(c1);
mC.add(c2);
mC.add(c3);
mC.add(c4);
q3.setAnswer(mC);
questions.add(q3);
Question q4 = new Question();
q4.setQuestion("4. “ ” ?");
List<Question.Answer> mD = new ArrayList<>();
Question.Answer d1 = new Question.Answer();
d1.setAnswerMessage("A《 》");
Question.Answer d2 = new Question.Answer();
d2.setAnswerMessage("B《 》");
Question.Answer d3 = new Question.Answer();
d3.setAnswerMessage("C《 》");
Question.Answer d4 = new Question.Answer();
d4.setAnswerMessage("D《 》");
mD.add(d1);
mD.add(d2);
mD.add(d3);
mD.add(d4);
q4.setAnswer(mD);
questions.add(q4);
return questions;
}
}
5.총화1.제스처 감지 기 구축,2 준비 데이터,3 뷰 필 퍼 에 하위 컨트롤 추가.4.애니메이션 배열 을 초기 화 합 니 다.5.Activity 의 Touch Event 사건 을 Gesture Detector 에 맡 기 고 6.onFling 방법 을 실현 합 니 다.
코드 다운로드:안 드 로 이 드 는 퀴즈 기 페이지 넘 기기 효 과 를 실현 합 니 다.
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.