Android 는 제스처 를 통 해 문제 풀이 기 페이지 넘 기기 효 과 를 실현 합 니 다.

본 논문 의 사례 는 안 드 로 이 드 퀴즈 기 페이지 넘 기기 기능 을 공유 하 였 으 며,주로 ViewFilpper 와 Gesture Detector 를 사용 하여 이 루어 집 니 다.참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
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 방법 을 실현 합 니 다.
코드 다운로드:안 드 로 이 드 는 퀴즈 기 페이지 넘 기기 효 과 를 실현 합 니 다.
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기