Android ongesturelistener enables sliding between the left and right sides of an image

Source: Internet
Author: User

Let's take a look.

Welcome_glide.xml

 

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">         <ViewFlipper android:id="@+id/viewflipper"                 android:layout_width="fill_parent"                 android:layout_height="fill_parent"/>      </LinearLayout>  

Java code

import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.util.DisplayMetrics;  import android.util.Log;  import android.view.GestureDetector;  import android.view.KeyEvent;  import android.view.MotionEvent;  import android.view.View;  import android.view.ViewGroup;  import android.view.Window;  import android.view.WindowManager;  import android.view.GestureDetector.OnGestureListener;  import android.view.animation.AnimationUtils;  import android.widget.ImageView;  import android.widget.ViewFlipper;  import static android.view.KeyEvent.KEYCODE_BACK;      public class WelcomeGlide extends Activity implements OnGestureListener{      private static final String TAG = "Fuchangle.AggHelp";      private int mScreenWidth ;      private int mScreenHeight ;      private GestureDetector detector;      private ViewFlipper flipper;      private int mIndexHelpPic = 0;      private int[] mBgList = {              R.drawable.guide01,              R.drawable.guide02,              R.drawable.guide03,              R.drawable.guide04,              R.drawable.guide05      };            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);                    requestWindowFeature(Window.FEATURE_NO_TITLE);          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);                    setContentView(R.layout.welcome_glide);                DisplayMetrics dm =  new DisplayMetrics();          getWindowManager().getDefaultDisplay().getMetrics(dm);          mScreenWidth = dm.widthPixels;          mScreenHeight = dm.heightPixels;          if(mScreenWidth <240){              mScreenWidth = 240;          }                    if(mScreenHeight < 320){              mScreenHeight = 320;          }          flipper = (ViewFlipper)this.findViewById(R.id.viewflipper);          flipper.addView(addImageByID(mBgList[mIndexHelpPic]), new ViewGroup.LayoutParams                  (ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT));          detector = new GestureDetector(this);      }            @Override      public boolean onDown(MotionEvent e) {          return false;      }        @Override      public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,              float velocityY) {          if(e1.getX()-e2.getX() > 120){              if(++mIndexHelpPic >= mBgList.length){                  mIndexHelpPic = mBgList.length - 1;                  backToMainDesk();                  return true;              }                            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_in));              this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));                            flipper.addView(addImageByID(mBgList[mIndexHelpPic]),new ViewGroup.LayoutParams(                      ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));              this.flipper.showNext();          }else if(e1.getX() - e2.getX()< -120){              if(--mIndexHelpPic < 0){                  mIndexHelpPic = 0;                  return true;              }                            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));              this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));              this.flipper.showPrevious();              return true;          }          return true;      }            private void backToMainDesk(){          startActivity(new Intent(this,QQActivity.class));          finish();      }            @Override      public boolean onKeyDown(int keyCode, KeyEvent event) {               switch (keyCode) {                  case KEYCODE_BACK:                     backToMainDesk();                 return true;                 default:                     break;               }               return super.onKeyDown(keyCode, event);           }                private View addImageByID(int id){          ImageView img = new ImageView(this);          img.setImageResource(id);          img.setAdjustViewBounds(true);          img.setMaxWidth(mScreenWidth);          img.setMaxHeight(mScreenHeight);          img.setScaleType(ImageView.ScaleType.FIT_XY);          return img;      }            @Override      public boolean onTouchEvent(MotionEvent event) {          Log.i("Fling",  "Activity onTouchEvent!");          return this.detector.onTouchEvent(event);        }            @Override      public void onLongPress(MotionEvent e) {      }        @Override      public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {          return false;      }        @Override      public void onShowPress(MotionEvent e) {      }        @Override      public boolean onSingleTapUp(MotionEvent e) {          return false;      }        }  

Put the following files in RES/anim

Push_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"/>      <alpha android:fromAlpha="1.0" android:toAlpha="1.0"      android:duration="500"/>  </set>  

Push_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" />         <alpha android:fromAlpha="1.0" android:toAlpha="1.0"            android:duration="500" />          </set>  

Push_right_in.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" />      <alpha android:fromAlpha="1.0" android:toAlpha="1.0"          android:duration="500" />  </set>  

Push_right_out.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" />        <alpha android:fromAlpha="1.0" android:toAlpha="1.0"            android:duration="500" />    </set>   

Original article: http://fuchangle.iteye.com/admin/blogs/1497208

 

 

II:

 

[Code = Java]
Package com. SL. quwei. UI. Manage;

Import Android. App. activity;
Import Android. content. intent;
Import Android. OS. Bundle;
Import Android. util. displaymetrics;
Import Android. util. log;
Import Android. View .*;
Import Android. View. animation. animationutils;
Import Android. widget .*;
Import com. SL. quwei. quweiapplication;
Import com. SL. quwei. R;

Import static Android. View. keyevent. keycode_back;

/**
* Created by intellij idea.
* User: Wulong
* Date: 12-2-22
* Time: AM
* To change this template use file | Settings | file templates.
*/
Public class agghelp extends activity implements gesturedetector. ongesturelistener {
Private Static final string tag = "quwei. agghelp ";
Private int mscreenwidth = 240;
Private int mscreenheight = 320;
Private gesturedetector detector;
Private viewflipper Flipper;
Private int mindexhelppic = 0;
Private int [] mbglist = {
R. drawable. agg_help01, // The image needed for sliding
R. drawable. agg_help02,
R. drawable. agg_help03,
R. drawable. agg_help04,
R. drawable. agg_help05,
R. drawable. agg_help06
};

/**
* Called when the activity is first created.
*/
@ Override
Public void oncreate (bundle savedinstancestate ){
Super. oncreate (savedinstancestate );
Setcontentview (R. layout. agg_bangzhuzhiyin );

Charsequence Title = gettitle ();
String loginname = (quweiapplication) getapplication (). getloginusername ();
String titlename = aggtools. getnewtitle (title, loginname );
Settitle (titlename );
Displaymetrics dm = new displaymetrics ();
Getwindowmanager (). getdefaultdisplay (). getmetrics (DM );
Mscreenwidth = DM. widthpixels;
Mscreenheight = DM. heightpixels;
If (mscreenwidth <240 ){
Mscreenwidth = 240;
}

If (mscreenheight <320 ){
Mbscreenheight = 320;
}

Flipper = (viewflipper) This. findviewbyid (R. Id. viewflipper01 );

// Flipper. addview (addbuttonbytext ("button"), new layoutparams (layoutparams. fill_parent, layoutparams. wrap_content ));
Flipper. addview (addimagebyid (mbglist [mindexhelppic]), new viewgroup. layoutparams (viewgroup. layoutparams. fill_parent, viewgroup. layoutparams. wrap_content ));
Detector = new gesturedetector (this );
}

Private void backtomaindesk (){
Startactivity (new intent (this, aggmanage. Class ));
Finish ();
}

Public Boolean onkeydown (INT keycode, keyevent event ){
Switch (keycode ){
Case keycode_back:
Backtomaindesk ();
Return true;
Default:
Break;
}
Return super. onkeydown (keycode, event );
}

Private view addimagebyid (int id ){
Imageview IMG = new imageview (this );
IMG. setimageresource (ID );
IMG. setadjustviewbounds (true );
IMG. setmaxwidth (mscreenwidth );
IMG. setmaxheight (mscreenheight );
IMG. setscaletype (imageview. scaletype. fit_xy );
Return IMG;
}

Public View addbuttonbytext (string text ){
Button BTN = new button (this );
BTN. settext (text );
Return BTN;
}

Public View addtextbytext (string text ){
Textview TV = new textview (this );
TV. settext (text );
TV. setgravity (1 );
Return TV;
}

@ Override
Public Boolean ontouchevent (motionevent event ){
Log. I ("Fling", "activity ontouchevent! ");
Return this. detector. ontouchevent (event );
}

@ Override
Public Boolean ondown (motionevent e ){
// Todo auto-generated method stub
Return false;
}

/**
* Listen to slide
*/
@ Override
Public Boolean onfling (motionevent E1, motionevent E2, float velocityx,
Float velocityy ){
// Todo auto-generated method stub
Log. I ("Fling", "fling happened! ");
If (e1.getx ()-e2.getx ()> 120 ){
If (++ mindexhelppic> = mbglist. Length ){
Mindexhelppic = mbglist. Length-1;
Backtomaindesk ();
Return true;
}

This. Flipper. setinanimation (animationutils. loadanimation (this, R. anim. push_left_in ));
This. Flipper. setoutanimation (animationutils. loadanimation (this, R. anim. push_left_out ));
// This. Flipper. addview (addtextbytext ("text box"), new layoutparams (layoutparams. fill_parent, layoutparams. wrap_content ));
Flipper. addview (addimagebyid (mbglist [mindexhelppic]), new viewgroup. layoutparams (viewgroup. layoutparams. fill_parent, viewgroup. layoutparams. wrap_content ));
This. Flipper. shownext ();
Return true;
} Else if (e1.getx ()-e2.getx () <-120 ){
If (-- mindexhelppic <0 ){
Mindexhelppic = 0;
Return true;
}

This. Flipper. setinanimation (animationutils. loadanimation (this, R. anim. push_right_in ));
This. Flipper. setoutanimation (animationutils. loadanimation (this, R. anim. push_right_out ));
This. Flipper. showprevious ();
Return true;
}
Return true;
}

@ Override
Public void onlongpress (motionevent e ){
// Todo auto-generated method stub

}

@ Override
Public Boolean onscroll (motionevent E1, motionevent E2, float distancex,
Float distancey ){
// Todo auto-generated method stub
Return false;
}

@ Override
Public void onshowpress (motionevent e ){
// Todo auto-generated method stub

}

@ Override
Public Boolean onsingletapup (motionevent e ){
// Todo auto-generated method stub
Return false;
}
}
[/Code]

Configuration file:

Agg_bangzhuzhiyin.xml
[Code = HTML]
<? XML version = "1.0" encoding = "UTF-8"?>
<Linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android"
Android: Orientation = "vertical"
Android: layout_width = "fill_parent"
Android: layout_height = "fill_parent"
Android: Background = "@ drawable/agg_sub_bg">
<Viewflipper Android: Id = "@ + ID/viewflipper01"
Android: layout_width = "fill_parent"
Android: layout_height = "fill_parent">
</Viewflipper>
</Linearlayout>
[/Code]

Put push_left_in.xml in anim
[Code = HTML]
<? 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"/>
<Alpha Android: fromalpha = "0.1" Android: toalpha = "1.0"
Android: Duration = "500"/>
</Set>
[/Code]

Put push_left_out.xml in anim

[Code = HTML]
<? 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"/>
<Alpha Android: fromalpha = "1.0" Android: toalpha = "0.1"
Android: Duration = "500"/>
</Set>
[/Code]

Put push_right_in.xml in anim
[Code = HTML]
<? 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"/>
<Alpha Android: fromalpha = "1.0" Android: toalpha = "0.1"
Android: Duration = "500"/>
</Set>
[/Code]

Put push_right_out.xml in anim

[Code = HTML]
<? 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"/>
<Alpha Android: fromalpha = "1.0" Android: toalpha = "0.1"
Android: Duration = "500"/>
</Set>
[/Code]

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.