自定义View实现拖动小圆球,并随机改变其颜色
//简单实现
package com.example.demo1;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
/**
@Author:lenovo
@E-mail: **********@163.com
@Date:2019/5/27 20:13
@Description:描述信息
*/
public class MyView extends View {
//画笔
private Paint mPaint;
//圆的半径
private float mRadius = 50f;
//圆的圆心的x坐标
public float pointX = mRadius;
//圆的圆心的Y坐标
public float pointY = mRadius;
//控制是否可以移动的变量 true的时候可以移动
private boolean moveable;
//定义颜色数组
private int colorArray[] = {Color.BLACK,Color.BLACK,Color.GREEN,Color.YELLOW, Color.RED};
private int paintColor = colorArray[0]; //定义画笔默认颜色
Context context;
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
//创建画笔
mPaint = new Paint();
//随机设置画笔颜色
mPaint.setColor(paintColor);
//mPaint.setStyle(Paint.Style.STROKE); //绘制空心圆
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setPaintRandomColor();
//根据圆心的坐标来绘制圆的位置的
canvas.drawCircle(pointX, pointY, mRadius, mPaint);
//线,我们根据圆心的位置上下左右画了四条超出屏幕的线(跟瞄准镜似得~手动滑稽)
//我们是不是可以有别的想法?陀螺仪去把我们的瞄准镜调动起来
canvas.drawLine(pointX,pointY, pointX+1500,pointY,mPaint);
canvas.drawLine(pointX,pointY, pointX-1500,pointY,mPaint);
canvas.drawLine(pointX,pointY, pointX,pointY+2500,mPaint);
canvas.drawLine(pointX,pointY, pointX,pointY-2500,mPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//手指触摸的 X Y 轴的坐标
float touchX;
float touchY;
//判断事件的类型
switch (event.getAction()){
//按下的事件
case MotionEvent.ACTION_DOWN:
touchX = event.getX();
touchY = event.getY();
//触摸位置的判断
if(touchX > pointX - mRadius && touchX < pointX + mRadius && touchY > pointY - mRadius && touchY < pointY + mRadius){
moveable = true;
}else{
moveable = false;
}
break;
//移动的事件
case MotionEvent.ACTION_MOVE:
if(moveable){
// 把我们圆心的位置(pointX,pointY)设置成当前触摸的位置(event.getX(),event.getY())
pointX = event.getX();
pointY = event.getY();
//重新绘制(重新调取onDraw方法)
invalidate();
}
break;
//抬起
case MotionEvent.ACTION_UP:
break;
}
/*
此处一定要将return super.onTouchEvent(event)修改为return true,原因是:
父类的onTouchEvent(event)方法可能没有做任何处理,但是返回了false。
一旦返回false,在该方法中再也不会收到MotionEvent.ACTION_MOVE及MotionEvent.ACTION_UP事件。
*/
return true;
}
//为画笔设置随机颜色的方法
private void setPaintRandomColor(){
Random rand = new Random();
int randomIndex = rand.nextInt(colorArray.length);
mPaint.setColor(colorArray[randomIndex]);
}
}
这里是布局
<com.example.demo1.MyView
android:id="@+id/my_view"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
/>
---------------------
自定义View实现拖动小圆球,并随机改变其颜色的更多相关文章
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小
一.首先说一下定义这样一个View有什么用?在一些app中,需要设置头像,而用户选择的图片可能是使用摄像头拍摄,也可能是选择的相册里面的图片,总之,这样的图片大小不一,就比如在使用某个聊天软件的时候, ...
- bootstrapTable随机改变列颜色
{ title: '运单编号', field: 'waybillNumber', align: 'center', valign: 'middle', cellStyle: function (val ...
- 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪
第一篇:一个防御塔+多个野怪(简易版)第二篇:防御塔随意放置第三篇:防御塔随意放置+多组野怪 1.动态addView防御塔 2.防御塔放置后不可以移动 3.弯曲道路 4.素材替换 第四篇:多波野怪 第 ...
- Android -- 自定义View小Demo,动态画圆(一)
1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...
- Android -- 自定义View小Demo,绘制四位数随机码(一)
1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...
- iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)
如果BarButtonItem是通过[[UIBarButtonItem alloc] initWithCustomView:(nonnull UIView *)]方法设置的.某些情况下需要修改BarB ...
- Android -- 自定义View小Demo,绘制钟表时间(一)
1,昨天刚看了hongyang大神推荐的自定义时钟效果(传动门:http://www.jianshu.com/users/a45d19d680af/),效果还是不错的,自己又在github上找了找,发 ...
- Android -- 自定义View小Demo,关于Path类的使用(一)
1,在我们知道自定义view中onDraw()方法是用于绘制图形的,而Path类则是其中的一个重要的类,如下图效果: 代码也没有什么难度,直接贴出来吧 @Override protected void ...
- 分析自定义view的实现过程-实现雪花飞舞效果(转载有改动)
声明:本文源码出自实现雪花飞舞效果(有改动)主要通过这篇文来分析自定义view的实现过程. 没事时,比较喜欢上网看看一些新的东西,泡在网上的日子就是一个很不错的网站. 下面开始了,哈哈.^_^ 大家都 ...
随机推荐
- linux系统监控:记录用户操作轨迹,谁动过服务器
1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...
- Spring中Bean的作用域差别
我觉得servlet和spring交叉起来,理解得快. Bean的作用域中,prototype和singleton作用域效果不一样,前者每次都会有新的实例,而后者始终一个实例 . 所以,java.ut ...
- C - Reading comprehension 二分法 求等比数列前N项和
Read the program below carefully then answer the question. #pragma comment(linker, "/STACK:1024 ...
- UVA 11825 状态压缩DP+子集思想
很明显的状态压缩思想了.把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1).即与差集+1比较. 这种枚举集合的思想还是第一次遇到,果 ...
- 个人常常使用的一些Eclipse技巧
引言 为了加快开发效率,方便地浏览源代码,重构以及重写一些方法等,Eclipse给我们提供了非常多方便的快捷键以及小技巧.以下是我总结一下经常使用的快捷键和技巧. 快捷键 清理控制台(console) ...
- Android使用GestureDetector实现手势滑动效果
直接看实例: package com.example.gesturedetector; import android.os.Bundle; import android.app.Activity; i ...
- JavaScript的代码库
JavaScript的代码库 本文主要是汇集了一些JavaScript中一些经常使用代码.方便以后查找和复用. javascript框架: <script language="java ...
- 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)
转载请注明出处:王亟亟的大牛之路 距离过春节还有1天.继续这一系列的git翻料之旅. 昨天的工具类真的非常棒,这里再推崇一下 传送门:http://blog.csdn.net/ddwhan0123/a ...
- web端log4net输出错误日志到mysql
1.引用log4net 2.配置log4net.config文件 <?xml version="1.0" encoding="utf-8" ?> & ...
- 曼哈顿距离MST
https://www.cnblogs.com/xzxl/p/7237246.html 讲的不错 /* 曼哈顿距离最小生成树 poj 3241 Object Clustering 按照上面的假设我们先 ...