您的位置:首页 > 移动开发 > Android开发

Android开发技巧 图片滚动效果实现

2009-12-12 12:22 1071 查看
实现屏幕的滚动效果,有两个关键点,一个是实现OnGestureListener,以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照 API文档,需要分两步来实现检测手势行为。创建GestureDetector实例,在onTouchEvent()方法中调用 GestureDetector的onTouchEvent()方法。另一个关键点是自己实现一个简单的View,来绘制图片。

  代码如下所示。由于,我们不需要使用layout定义,所以不需要提供xml文件。直接在程序里面setContentView()即可。

 

  package com.android;

  import android.app.Activity;

  import android.content.Context;

  import android.content.res.Resources;

  import android.graphics.Bitmap;

  import android.graphics.BitmapFactory;

  import android.graphics.Canvas;

  import android.graphics.Paint;

  import android.os.Bundle;

  import android.view.GestureDetector;

  import android.view.MotionEvent;

  import android.view.View;

  import android.view.ViewGroup;

  import android.view.GestureDetector.OnGestureListener;

  public class HorizontalScroll extends Activity implements OnGestureListener {

  private static final int X_MAX = 800;

  private static final int Y_MAX = 600;

  private int scrollX = 0;

  private int scrollY = 0;

  MyView main;

  Bitmap bmp;

  Bitmap adapt;

  Resources res;

  Paint paint;

  GestureDetector gestureScanner;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  gestureScanner = new GestureDetector(this);

  paint = new Paint();

  res = getResources();

  bmp = BitmapFactory.decodeResource(res, R.drawable.arc);

  adapt = Bitmap.createBitmap(bmp);

  main = new MyView(this);

  setContentView(main, new ViewGroup.LayoutParams(800, 600));

  }

  @Override

  public boolean onTouchEvent(MotionEvent me) {

  return gestureScanner.onTouchEvent(me);

  }

  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

  float distanceY) {

  main.handleScroll(distanceX, distanceY);

  return true;

  }

  public boolean onDown(MotionEvent e) {

  return true;

  }

  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

  float velocityY) {

  return true;

  }

  public void onLongPress(MotionEvent e) {

  }

  public void onShowPress(MotionEvent e) {

  }

  public boolean onSingleTapUp(MotionEvent e) {

  return true;

  }

  // //////////////////

  // /////////////////

  // ////////////////

  class MyView extends View {

  public MyView(Context context) {

  super(context);

  }

  @Override

  protected void onDraw(Canvas canvas) {

  canvas.drawBitmap(adapt, -scrollX, -scrollY, paint);

  }

  public void handleScroll(float distX, float distY) {

  // X-Axis ////////////////////////////////

  if (distX > 6.0) {

  if (scrollX < 460) {

  scrollX += 15;

  }

  } else if (distX < -6.0) {

  if (scrollX >= 15) {

  scrollX -= 15;

  }

  }

  // //////////////////////////////////////////

  // Y-AXIS //////////////////////////////////

  if (distY > 6.0) {

  if (scrollY < 100) {

  scrollY += 15;

  }

  } else if (distY < -6.0) {

  if (scrollY >= 15) {

  scrollY -= 15;

  }

  }

  // //////////////////////////////////////////

  //

  // if ((scrollX <= 480) && (scrollY <= 120)) {

  // adapt = Bitmap.createBitmap(bmp, scrollX, scrollY, 320, 480);

  // invalidate();

  // }

  invalidate();

  }

  }

  }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息