android代码控制组件的移动,Android自定义控件实现随手指移动的小球

一个关于自定义控件的小Demo,随着手指移动的小球。

先看下效果图:

a1b7048385dd928d21d75b6096d3618b.png

实现代码如下:

1.自定义控件类

package com.dc.customview.view;

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.view.WindowManager;

public class DrawCircle extends View {

//圆的初始位置

private int x = 100;

private int y = 100;

Context context;

/**

* 有style资源文件时调用

* @param context

* @param attrs

* @param defStyle

*/

public DrawCircle(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

this.context = context;

}

/**

* xml创建时调用

* @param context

* @param attrs

*/

public DrawCircle(Context context, AttributeSet attrs) {

super(context, attrs);

this.context = context;

}

/**

* java代码创建时调用

* @param context

*/

public DrawCircle(Context context) {

super(context);

this.context = context;

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// 画笔

Paint paint = new Paint();

paint.setColor(Color.RED);

//绘制圆

//cx :圆心的x坐标

//cy :圆心的y坐标

//radius :圆的半径

//paint :画笔

canvas.drawCircle(x, y, 20, paint);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

case MotionEvent.ACTION_MOVE:

case MotionEvent.ACTION_UP:

// 获取当前触摸点的x,y坐标

x = (int) event.getX();

y = (int) event.getY();

break;

}

//获取屏幕宽高

WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

int width = manager.getDefaultDisplay().getWidth();

int heigh = manager.getDefaultDisplay().getHeight();

//重新绘制圆 ,控制小球不会被移出屏幕

if(x>=20 && y>=20 && x<=width-20 && y<=heigh-90){

invalidate();

}

// 自己处理触摸事件

return true;

}

}

2.引用自定义控件

第一种:xml中引用

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/rl">

android:id="@+id/circle"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

第二种:代码中引用

package com.dc.customview;

import com.dc.customview.view.DrawCircle;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.RelativeLayout;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取容器

RelativeLayout container = (RelativeLayout) findViewById(R.id.rl);

//创建自定义控件

DrawCircle circle = new DrawCircle(this);

//添加到容器

container.addView(circle);

}

}

以上,将Demo运行到模拟器或手机上,即可实现一个红色的圆,随着手指触摸移动而移动的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值