//简单实现
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实现拖动小圆球,并随机改变其颜色的更多相关文章

  1. Android 自定义View可拖动移动位置及边缘拉伸放大缩小

    一.首先说一下定义这样一个View有什么用?在一些app中,需要设置头像,而用户选择的图片可能是使用摄像头拍摄,也可能是选择的相册里面的图片,总之,这样的图片大小不一,就比如在使用某个聊天软件的时候, ...

  2. bootstrapTable随机改变列颜色

    { title: '运单编号', field: 'waybillNumber', align: 'center', valign: 'middle', cellStyle: function (val ...

  3. 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪

    第一篇:一个防御塔+多个野怪(简易版)第二篇:防御塔随意放置第三篇:防御塔随意放置+多组野怪 1.动态addView防御塔 2.防御塔放置后不可以移动 3.弯曲道路 4.素材替换 第四篇:多波野怪 第 ...

  4. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  5. Android -- 自定义View小Demo,绘制四位数随机码(一)

    1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...

  6. iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)

    如果BarButtonItem是通过[[UIBarButtonItem alloc] initWithCustomView:(nonnull UIView *)]方法设置的.某些情况下需要修改BarB ...

  7. Android -- 自定义View小Demo,绘制钟表时间(一)

    1,昨天刚看了hongyang大神推荐的自定义时钟效果(传动门:http://www.jianshu.com/users/a45d19d680af/),效果还是不错的,自己又在github上找了找,发 ...

  8. Android -- 自定义View小Demo,关于Path类的使用(一)

    1,在我们知道自定义view中onDraw()方法是用于绘制图形的,而Path类则是其中的一个重要的类,如下图效果: 代码也没有什么难度,直接贴出来吧 @Override protected void ...

  9. 分析自定义view的实现过程-实现雪花飞舞效果(转载有改动)

    声明:本文源码出自实现雪花飞舞效果(有改动)主要通过这篇文来分析自定义view的实现过程. 没事时,比较喜欢上网看看一些新的东西,泡在网上的日子就是一个很不错的网站. 下面开始了,哈哈.^_^ 大家都 ...

随机推荐

  1. ggplot画基本图形类型

    df<-data.frame( x=c(3,1,5), y=c(2,4,6), label=c("a","b","c"))p<- ...

  2. codevs——T1214 线段覆盖

    http://codevs.cn/problem/1214/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

  3. javax ee常用类

    1.public interface HttpServletRequest extends ServletRequest 都在package javax.servlet.http;包下 接口继承接口p ...

  4. log显示error时的堆栈信息理解和分析

    error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息, ...

  5. HDU 4508

    祼的完全背包问题 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...

  6. Extjs学习笔记——Ext.data.JsonStore使用说明

    Ext.data.JsonStore继承于Ext.data.Store.使得从远程JSON数据创建stores更为方便的简单辅助类. JsonStore合成了Ext.data.HttpProxy与Ex ...

  7. swift 拼图小游戏

    依据这位朋友的拼图小游戏改编 http://tangchaolizi.blog.51cto.com/3126463/1571616 改编主要地方是: 原本着我仁兄的代码时支持拖动小图块来移动的,我參照 ...

  8. 【Git笔记】怎样在同主机同账户下实现多个gitlab帐号管理各自的remote repo

    我们可能会遇到以下的场景: 1)多人共用同一台Linux开发机,该开发机仅仅有一个共用的work帐号,非常多人都用这个帐号登录主机进行日常开发. 2)该work帐号下统一安装了gitclient供多人 ...

  9. 从头认识java-15.2 Collection的经常用法(2)-注意点

    上一章节我们讲述了Collection的经常用法.还有之前的章节我们介绍了Collection的addAll方法,这一章节我们介绍一下它的注意点. 注意点就是,在经常用法里面,基本都是可选操作. 什么 ...

  10. DirectFB学习之移植到nuc972平台 标签: DirectFBlinux图形加速驱动【转】

    本文转载自:http://blog.csdn.net/jxgz_leo/article/details/70137304 [nuc972开发板购买地址,感谢支持](https://shop102749 ...