展会信息港展会大全

Android 可在全屏幕自由拖动的view
来源:互联网   发布日期:2015-09-24 19:56:15   浏览:7427次  

导读:Android中自带的view种类很多,但是有时候不能满足我们的需求,下面介绍一种自定义view的方法,实现了拖动矩形到屏幕任意位置的需求。[图片] 程序截图[代码] Activity.javapackage com.zhuozhuo;import andr......

Android中自带的view种类很多,但是有时候不能满足我们的需求,下面介绍一种自定义view的方法,实现了拖动矩形到屏幕任意位置的需求。

[图片] 程序截图

[代码] Activity.java

package com.zhuozhuo;

import android.app.Activity;

import android.os.Bundle;

public class CSDNActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

[代码] CustomView.java

package com.zhuozhuo;

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.MotionEvent;

import android.view.View;

/**

* 自定义的view,需要覆盖onDraw()方法绘制控件,覆盖onTouchEvent()接收触摸消息

*/

public class CustomView extends View {

private static final int WIDTH = 40;

private Rect rect = new Rect(0, 0, WIDTH, WIDTH);//绘制矩形的区域

private int deltaX,deltaY;//点击位置和图形边界的偏移量

private static Paint paint = new Paint();//画笔

public CustomView(Context context, AttributeSet attrs) {

super(context, attrs);

paint = new Paint();

paint.setColor(Color.RED);//填充红色

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawRect(rect, paint);//画矩形

}

@Override

public boolean onTouchEvent (MotionEvent event) {

int x = (int) event.getX();

int y = (int) event.getY();

switch(event.getAction()) {

case MotionEvent.ACTION_DOWN:

if(!rect.contains(x, y)) {

return false;//没有在矩形上点击,不处理触摸消息

}

deltaX = x - rect.left;

deltaY = y - rect.top;

break;

case MotionEvent.ACTION_MOVE:

case MotionEvent.ACTION_UP:

Rect old = new Rect(rect);

//更新矩形的位置

rect.left = x - deltaX;

rect.top = y - deltaY;

rect.right = rect.left + WIDTH;

rect.bottom = rect.top + WIDTH;

old.union(rect);//要刷新的区域,求新矩形区域与旧矩形区域的并集

invalidate(old);//出于效率考虑,设定脏区域,只进行局部刷新,不是刷新整个view

break;

}

return true;//处理了触摸消息,消息不再传递

}

}

[代码] main.xml 布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<com.zhuozhuo.CustomView android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

</LinearLayout>

赞助本站

人工智能实验室

相关热词: 拖动 view

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港