广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android通过手势实现的缩放处理实例代码

    2018-04-08 09:03:51 次阅读 稿源:互联网
    广告

    网络上传言HTC的HERO-ROM支持多点触摸的论证大多源于浏览网页和图片时,能像IPhone一样通过手势来控制页面的大小。下面的例子是利用现有的API实现HERO浏览图片和网页的缩放功能。

    主要原理是onTouchEvent事件中的参数MotionEvent,它有一个getSize()方法。在一个点的时候,该方法永远返回0,而在两个触电的时候,该方法则根据两点相对位置变化而返回不同的值。我们只需计算出两点之间的距离变化,距离的大小表明我们希望目标变化的趋势。而getX()和getY()方法则永远座落在两触点之间,这样趋势和目标我们都有了。剩下的就是对目标根据趋势进行放大或缩小即可。
    代码如下:

     /**
     * ...
     *
     * @author vlinux
     *
     */
    public class MultiTouchTestActivity extends Activity {
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      // setContentView(R.layout.main);
      View view = new MultiTouchView(this);
      setContentView(view);
     }

     class MultiTouchView extends View {

      private float x1;
      private float y1;
      private float x2;
      private float y2;

      public MultiTouchView(Context context) {
       super(context);
       // TODO Auto-generated constructor stub
      }

      @Override
      public boolean onTouchEvent(MotionEvent event) {
       // TODO Auto-generated method stub

       float size = event.getSize();

       int szi = (int) size;
       int dxi = szi >> 12;
       int dyit = ((1 << 12) - 1);
       int dyi = szi & dyit;

       DisplayMetrics metrics = getResources().getDisplayMetrics();
       float dx = metrics.widthPixels * dxi / (float) dyit;
       float dy = metrics.heightPixels * dyi / (float) dyit;

       x1 = event.getX();
       y1 = event.getY();

       x2 = x1 + dx;
       y2 = y1 + dy;

       invalidate();

       return true;
      }

      @Override
      protected void onDraw(Canvas canvas) {
       // TODO Auto-generated method stub
       super.onDraw(canvas);

       float r = (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2)
         * (y1 - y2)) / 2;
       r = 50 >= r ? 50 : r;

       Paint paint = new Paint();
       paint.setColor(Color.BLUE);
       canvas.drawCircle(x1, y1, r, paint);

      }

     }

    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告