Android多点触控生成控件,并且移动
来源:互联网 发布:免费erp管理系统 知乎 编辑:程序博客网 时间:2024/05/18 03:56
效果图如下:
提示:由于效果图用的是夜神模拟器所以多点的触碰的效果没有显示出来
思路大纲:
1.获取手指的状态:按下,移动,移开。
2.按下的时候创建一个控件,并且加入控件数组。(在创建(画)控件的时候给画笔颜色设置随机)
3.获取手指移动的路径,赋给控件。
提示:无xml布局
代码如下:圆控件类 Circle.java
package com.example.androideighteen;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import java.util.Random;/** * Created by Administrator on 2017/7/8. */public class Circle { public float x; public float y; public int r = 100; public int id;//手指的名字 int color; int red; int yellow; int bule; Random random = new Random(); public Circle(){ } public Circle(float x, float y, int id) { this.x = x; this.y = y; this.id = id; } /** * 画自己 * @param canvas */ public void drawSelf(Canvas canvas, Paint paint){ red =random.nextInt(255); yellow =random.nextInt(255); bule =random.nextInt(255); //设置随机颜色 color = Color.rgb(red,yellow,bule); //设置画笔颜色 paint.setColor(color); canvas.drawCircle(x,y,r,paint); }}
主要类:MyView.java
package com.example.androideighteen;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/7/8. */public class MyView extends View { List<Circle> circles = new ArrayList<>(); private Paint paint; public MyView(Context context) { super(context); paint = new Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画圆 for (Circle circle : circles) { circle.drawSelf(canvas,paint); } } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); //获取手指按下去的转态 int action_code = action & 0xff; if(action_code>=5){ action_code-=5; } //得到每根手指的下标 int pointIndex = action>>8; float x = event.getX(); float y = event.getY(); //得到每根手指的坐标 int id = event.getPointerId(pointIndex); switch (action_code) { case MotionEvent.ACTION_DOWN: //执行按下的操作 //实例化圆 Circle circle = new Circle(x,y, id); circles.add(circle); break; case MotionEvent.ACTION_MOVE: //执行移动的操作 for (int i = 0; i <circles.size() ; i++) { //根据i得到手指的ID int id1 = event.getPointerId(i); //根据id1得到圆 Circle c = getCircleById(id1); //重新获取坐标 c.x = event.getX(i); c.y = event.getY(i); } break; case MotionEvent.ACTION_UP: //执行抬起的操作 //circles.remove(id); //得到是哪一根抬起,根据id找到圆 Circle c =getCircleById(id); //将圆从集合中移除 circles.remove(c); break; } //重绘 重新调用OnDraw 主线程中调用OnDraw invalidate(); return true; } /** * 根据id查询Circle数组里面的Circle * @param id * @return */ public Circle getCircleById(int id){ for (Circle circle : circles) { if(circle.id==id){ return circle; } } return null; }}
显示到页面上Activity类 MainActivity.java
package com.example.androideighteen;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); }}
如有疑问,或者对本博文有什么见解,看法或者是建议,欢迎指出,谢谢。
阅读全文
1 0
- Android多点触控生成控件,并且移动
- Android自定义控件ImageViwe(四)——多点触控实现图片的自由移动
- android -布局控件禁用多点触控
- Android onTouch 多点触控实现图片移动缩放
- Android 图片随着手势缩放,平移,并且支持多点触控
- android多点触控
- Android多点触控
- android 多点触控
- android 多点触控
- android 多点触控
- android 多点触控
- Android多点触控
- Android多点触控
- Android多点触控
- Android多点触控
- Android 多点触控
- android 多点触控
- Android多点触控
- c语言链表实现通讯录
- 磁盘操作系统 cmd命令
- 聚类算法--K-Medoids(基于R的应用示例)
- CRC校验
- Python正则表达式
- Android多点触控生成控件,并且移动
- iOS日常Debug之Crash日志文件分析
- linux之rpm
- 传智播客Python就业班
- Building workspace has encountered a problem.Error occured during the build.
- 查找(一)史上最简单清晰的红黑树讲解
- CCF 历年真题之Z字形扫描(_1412_2_ZGlyphScan.java )参考答案
- ContentValues: onError :failed to connect to /169.254.1**.2** (port 8080) after
- tf随笔-5