简单的自定义view

原创 2016年08月31日 12:17:05

自定义图形类:

package com.example.dell.androidtwo;

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;

/**
 * Created by dell on 2016/8/31.
 */

public class Round extends View {

    //定义矩形长宽
    private static final int WIDTH = 90;
    private Rect rect = new Rect(0, 0, WIDTH, WIDTH);
    //画笔
    private static Paint paint = new Paint();
    //点击位置和图形边界的偏移量
    private int deltaX,deltaY;
    //代码调用构造
    public Round(Context context) {
        super(context);
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
    }
    //XML调用构造
    public Round(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
    }
    //绘制图形
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(rect.centerX(),rect.centerY(),WIDTH/2, 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;//处理了触摸消息,消息不再传递
    }

}

主类:

package com.example.dell.androidtwo;

import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class Hello extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //XML调用
        setContentView(R.layout.activity_hello);
        //代码调用
       /* Round round = new Round(this);
        setContentView(round);*/


    }
}

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: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="com.example.dell.androidtwo.Hello">

    <com.example.dell.androidtwo.Round
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</RelativeLayout>

自定义View学习-绘制一个简单的圆

想把平时学到的关于自定义View的一些东西记录下来,从最基本的慢慢往难学吧。这篇是简单的不能再简单的绘制,算是一个入门吧。做了两个,一个是就显示圆。还有一个是绘制的圆根据手指滑动的位置来移动。并且圆的...
  • wangbin_learn
  • wangbin_learn
  • 2016年04月26日 16:44
  • 1610

Android自定义简单的View

日积月累第三周第一天: 昨天一个人去爬山,一路的美景,一路走来确实是身心的的愉快,很享受,但是愉快过后就是身体的疲惫。其实工作中也是这样子的,要想得到别人的认可和背后的努力付出有很大的结果,生活...
  • liuhaomatou
  • liuhaomatou
  • 2014年04月01日 00:17
  • 3013

Android自定义View 一<最简单的自定义View>

为什么要自定义Viewandroid提供了很多控件供我们使用 但有些功能是系统所提供的实现不 了的 这时候我们就需要自定义一个View来实现我们所需要的效果. 在Android中所有的控件都直...
  • qq_36209474
  • qq_36209474
  • 2017年03月19日 15:39
  • 1105

自定义View,有这一篇就够了

我的简书同步发布:自定义View,有这一篇就够了 为了扫除学习中的盲点,尽可能多的覆盖Android知识的边边角角,决定对自定义View做一个稍微全面一点的使用方法总结,在内容并没有什么独特,其他大神...
  • huachao1001
  • huachao1001
  • 2016年06月03日 15:08
  • 37921

Android 中自定义View的初步总结

概述在开发过程中,经常会遇到系统中提供的控件无法满足产品的设计需求,这时可能就需要考虑使用自定义的View来实现产品的设计细节了。对于自定义View,可以分为两种,一种是自定义控件(继承View),另...
  • yuminfeng728
  • yuminfeng728
  • 2016年06月08日 13:32
  • 3841

android底部导航栏+viewPager+自定义view的简单实现

底部导航栏
  • sinat_28676875
  • sinat_28676875
  • 2016年08月16日 20:02
  • 1292

自定义View的onMeasure、onLayout

原文 http://yifeiyuan.me/2015/10/12/%E8%87%AA%E5%AE%9A%E4%B9%89View%E7%9A%84onMeasure%E3%80%81onLayout...
  • yunnywu
  • yunnywu
  • 2016年01月07日 11:21
  • 924

Android 自定义View -- 简约的折线图

接上篇 Android 圆形百分比(进度条) 自定义view 昨天分手了,不开心,来练练自定义view麻痹自己,毕竟菜鸟只能靠不断练习提高。#程序员不应该有女朋友# 我们要实现的是一种只有来看趋势,不...
  • wingichoy
  • wingichoy
  • 2015年12月30日 15:25
  • 7047

自定义View封装

在iOS开发中经常遇到自定的控件,平时常用的一种是用到代码的方式自定义,一种是用XIB的方式自定义 1.代码的方式自定义 在这里自定义一个按钮为例 自定义的按钮上面要添加一些东西,这样我们就可以...
  • MyCSDN_FanJinxin
  • MyCSDN_FanJinxin
  • 2016年04月13日 14:19
  • 845

自定义View_一个非常简洁的柱状图

快过年了,提前祝大家新年快乐哦。马上就可以闲下来休息几天了,好幸福啊。。。不多说了,最近项目中有个地方要用柱状图显示客户的消费情况,本着一名程序员的优秀品质,上gitbub上连续搜罗了有关画图的,不得...
  • u013762572
  • u013762572
  • 2017年01月14日 16:30
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的自定义view
举报原因:
原因补充:

(最多只允许输入30个字)