Android 自定义View控件,实现跟随手指触摸移动的小球

本文主要是介绍Android 自定义View控件,实现跟随手指触摸移动的小球,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android UI组件是通过继承View类,然后绘制内容,比如ImageView,TextView等组件都是继承View类。

当Android系统提供的组件功能不能满足需求时,可以通过继承View类重写一个或多个方法,派生自定义的组件,View类常用重写方法:

1.构造器:View子类最基本的重写方法

protected voidonDraw(Canvas canvas)

public booleanonTouchEvent(MotionEvent event)

public boolean onTrackballEvent(MotionEvent event)
public boolean onKeyDown(int keyCode, KeyEvent event)
public boolean onKeyUp(int keyCode, KeyEvent event)
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)//检测View组件及子组件大小
protected void onSizeChanged(int w, int h, int oldw, int oldh)
protected boolean onSetAlpha(int alpha)
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
public void onWindowFocusChanged(boolean hasWindowFocus)
protected void onFinishInflate()//回调方法,当应用从xml文件加载构建界面之后此方法会被回调
定义DrawView 实现跟随手指移动的小球 DrawView.java
package shortcut.song.com.myapplication;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;/**
 * Created by Administrator on 2017/1/6 0006.
 */

public class DrawView extends View {public float currentX = 80;public float currentY = 60;public DrawView(Context context){super(context);}public DrawView(Context context, AttributeSet attributeSet){super(context, attributeSet);}@Override
    protected void onDraw(Canvas canvas) {Paint p = new Paint();p.setColor(Color.RED);canvas.drawCircle(currentX, currentY, 10, p);}@Override
    public boolean onTouchEvent(MotionEvent event) {this.currentX = event.getX(); //触摸座标X
        this.currentY = event.getY(); //触摸座标Y
        invalidate();//重绘组件
        return true;//返回true:事件已处理,此处必须返回true,否则小球移动不了。
    }
}
 
//Layout文件activity_draw_view.xml
//通过代码编程实现时没用到此文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_draw_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="shortcut.song.com.myapplication.DrawViewActivity">
    <!-- 自定义的DrawView组件 --><shortcut.song.com.myapplication.DrawView  
        android:id="@+id/drawview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
	android:background="#0ff0ff"/>
</RelativeLayout>

 
DrawViewActivity.java
package shortcut.song.com.myapplication;import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;public class DrawViewActivity extends AppCompatActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//通过XML布局实现
        //setContentView(R.layout.activity_draw_view);
        //final DrawView mDrawView = (DrawView)findViewById(R.id.drawview);

        //通过代码编程实现
        LinearLayout main = new LinearLayout(this);main.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));main.setOrientation(LinearLayout.HORIZONTAL);main.setGravity(Gravity.CENTER);DrawView mDrawView = new DrawView(this);mDrawView.setBackgroundColor(Color.BLUE);main.addView(mDrawView);setContentView(main);//设置Aictivity 显示View

    }
}

 

这篇关于Android 自定义View控件,实现跟随手指触摸移动的小球的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144187

相关文章

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho