博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之多点触控实例
阅读量:6983 次
发布时间:2019-06-27

本文共 2308 字,大约阅读时间需要 7 分钟。

直接上代码,代码内容上有相应的注释。效果作简短介绍,有一个圆形一个方形,当一只手指触控的时候只有圆形随着移动;当两只手指触控的时候圆形与方形各自随着手指移动。不要忘记使用View.invalidate()对绘图进行更新。

/*
 import相关class 
*/
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
public 
class multi 
extends Activity
{
  // x1,y1是第一个触控点;x2,y2是第二个触控点

  public float x1, x2, y1, y2;

  private MyView myView;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    //设置没有title
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // getWindow().setFlags(flags, mask)
    x1 = 30;
    y1 = 30;
    x2 = 200;
    y2 = 30;
    super.onCreate(savedInstanceState);
    /* 设置ContentView为自定义的MyView */
    myView = new MyView(this);
    setContentView(myView);
  }
  @Override
  public boolean onTouchEvent(MotionEvent event)
  {
//    if(event.getX(1)==event.getX(0)&&event.getY(1)==event.getY(0))、
    
//如果有两个点接触才执行该代码段
    if (event.getPointerCount() == 2)
    {
      x2 = event.getX(1);
      y2 = event.getY(1);
    }
    x1 = event.getX(0);
    y1 = event.getY(0);
    //用于更新view

    myView.invalidate();

//    Log.d("multi01", event.getPointerCount() + " xy1: " + x1 + ", "

//        + y1 + "  xy2: " + x2 + ", " + y2);
    return super.onTouchEvent(event);
  }
  /* 自定义继承View的MyView */
  private class MyView extends View
  {
    public MyView(Context context)
    {
      super(context);
    }
    /* 覆盖onDraw() */
    @Override
    protected void onDraw(Canvas canvas)
    {
      super.onDraw(canvas);
      /* 设置背景为白色 */
      canvas.drawColor(Color.WHITE);
      Paint paint = new Paint();
      /* 去锯齿 */
      paint.setAntiAlias(true);
      /* 设置paint的style为FILL:实心 */
      paint.setStyle(Paint.Style.FILL);
      /* 设置paint的颜色 */
      paint.setColor(Color.BLUE);
      /* 画一个实心圆 */
      canvas.drawCircle(x1, y1, 30, paint);
      /* 画一个实心正方形 */
      canvas.drawRect(x2 - 30, y2 - 30, x2 + 30, y2 + 30, paint);
      paint.setColor(Color.RED);
      canvas.drawLine(x1, y1, x2, y2, paint);
      /* 设置渐变色 */
      Shader mShader = new LinearGradient(0, 0, 100, 100, new int[]
      { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }, null,
          Shader.TileMode.REPEAT);
      paint.setShader(mShader);
      /* 写字 */
      paint.setTextSize(14);
      canvas.drawText("xy1: " + x1 + "; " + y1, 80, 50, paint);
      canvas.drawText("xy2: " + x2 + "; " + y2, 80, 120, paint);
    }
  }

转载地址:http://rivpl.baihongyu.com/

你可能感兴趣的文章
亚信安全火力全开猎捕“坏兔子”,全歼详解
查看>>
智能家居——IoT零基础入门篇
查看>>
《Linux From Scratch》第一部分:介绍 第一章:介绍-1.3. 更新日志
查看>>
阿里将在雄安新区设3家子公司:涉AI、蚂蚁金服和菜鸟;北航设立全国首个人工智能专业,与百度合作办学...
查看>>
Powershell指令集_2
查看>>
归并排序算法
查看>>
北京第一个公共云计算平台即将诞生
查看>>
5G频谱相争“兵戎相见”各相部署风起云涌
查看>>
云计算从“仰望星空”到“脚踏实地”
查看>>
台积电要造第一款7nm芯片 明年下半年可投产
查看>>
《逻辑与计算机设计基础(原书第5版)》——3.9 二进制加法器
查看>>
《中国人工智能学会通讯》——8.25 基于演化优化的生物网络配准
查看>>
飞鹤乳业CIO:移动化让企业品牌和消费者紧密连接
查看>>
教你编写Node.js中间件,实现服务端缓存
查看>>
美国税局再遭攻击:原是偷来的社会安全号码作祟
查看>>
2020年全球云服务规模将达3900亿美元
查看>>
Facebook、Netflix 等多家科技巨头谈“设计”
查看>>
雅虎核心业务售与Verizon:互联网先驱的时代终结
查看>>
市场规模占全国4成,广东物联网市场发展强劲
查看>>
ICS—CERT官网公示匡恩网络新发现四工控漏洞
查看>>