自定义View(板块随手指移动)

原创 2016年05月31日 09:03:04
package com.example.k.myapplication;

/**
 * Created by k on 2016/5/30.
 */
public class demo {
    static boolean b = false;
    static int a = 0;

    public static void startBoolean() {
        b = true;
    }
    public static void closeBoolean(){
        b = false;
    }

}

================================================================

package com.example.k.myapplication;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class MainActivity extends AppCompatActivity {
MyView my;
    float value;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        my = (MyView)findViewById(R.id.my);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            demo.closeBoolean();
        }
        if (event.getAction() == MotionEvent.ACTION_DOWN) {// 按下即可触
            Log.i("ok","主");
            value = event.getY();
        }
        my.method((int)event.getX(),(int)(event.getY()-value));
        return super.onTouchEvent(event);
    }
}
================================================================================

package com.example.k.myapplication;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.RelativeLayout;

/**
 * Created by k on 2016/5/30.
 */
public class MyView extends View {
    int value = 0,value1=0;
    WindowManager wm = (WindowManager) getContext()
            .getSystemService(Context.WINDOW_SERVICE);

    int width = wm.getDefaultDisplay().getWidth();
    int height = wm.getDefaultDisplay().getHeight();
     int X;
    Context context;
   int Y;
    int a,c=0;
    public void method(int x,int y){
        value = getTop();
        Log.i("ok","y=======>"+y);
        if(demo.b) {
            if(value1 + y>0&&value1+200 + y<1280-160) {
                layout(getLeft(), value1 + y, getRight(), value1+200 + y);
            }
        }
    }
    private static final int DEFAULT_VIEW_WIDTH = 100;
    private static final int DEFAULT_VIEW_HEIGHT = 100;
    public MyView(Context context) {
        super(context);
    }
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }
    //测量自定义View的宽和高
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMesureSpec) {
        int width  = measureDimension(DEFAULT_VIEW_WIDTH, widthMeasureSpec);
        int height = measureDimension(DEFAULT_VIEW_HEIGHT, heightMesureSpec);
        setMeasuredDimension(width, height);
    }
    protected int measureDimension( int defaultSize, int measureSpec ) {
        int result = defaultSize;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);
        //当子控件被width或者height被设置为确定值时就会被激活
        if (specMode == MeasureSpec.EXACTLY) {
            result = specSize; //建议:result直接使用确定值
            }
        //当子控件被设置为wrap_content时,就会进入此判断
        else if (specMode == MeasureSpec.AT_MOST) {
            result = Math.max(defaultSize, specSize); //建议:result不能大于specSize
            }
        //UNSPECIFIED,没有任何限制,所以可以设置任何大小
        //多半出现在自定义的父控件的情况下,期望由自控件自行决定大小
        else {
            result = defaultSize;
            }
        return result;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.YELLOW);
        //使view里面的正方形居中
        //canvas.drawRect(getWidth()/2-20,getHeight()/2-20,getWidth()/2+20,getHeight()/2+20,paint);
        //使正方形居中且靠右
        canvas.drawRect(0,getHeight()/2-20,40,getHeight()/2+20,paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        demo.startBoolean();
        value1 = value;
        return super.onTouchEvent(event);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

一个随手指移动的自定义View和一个随手指移动的ImageView(附源码)

效果以及区别 这是两个项目,一个是myView继承自View,一个是myImageView继承自ImageView,myView中的圆形会根据手指移动,即使手指并未点到圆形上。myImageView是...
  • fuckluy
  • fuckluy
  • 2016年12月15日 17:40
  • 1474

【Android应用实例之二】跟随手指的小球——自定义View应用

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/6828044  作者:张燕广 实现的功能:手指在屏幕上滑动,变幻颜色...
  • m_changgong
  • m_changgong
  • 2011年09月27日 22:53
  • 6947

Android 实例:通过自定义View组件实现跟随手指移动的小兔子

技术要点: 首先需要继承 android.view.View 类, 然后通过重写 onDraw() 方法设置兔子的默认显示位置, 最后重写其触摸事件,该事件中设置兔子随手指而移动。 实例图片: ...
  • u014136472
  • u014136472
  • 2015年08月03日 23:09
  • 1184

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

Android UI组件是通过继承View类,然后绘制内容,比如ImageView,TextView等组件都是继承View类。 当Android系统提供的组件功能不能满足需求时,可以通过继承View类...
  • u013420428
  • u013420428
  • 2017年01月21日 16:13
  • 1630

自定义view实现随手指移动的小球及画轨迹

先直接上代码: step1.建立drawview.java package com.example.joky27.customview; import android.content...
  • julia27
  • julia27
  • 2017年04月18日 12:12
  • 539

android:View随手指的移动而移动

我们经常要做一些效果,比如,点击之后的动画,随着手指的移动而移动。那么它们如何实现的呢?我们直到,view的自动移动,我们可以设置动画,比如之前写的Fragment的进入与弹出动画:https://g...
  • NUPTboyZHB
  • NUPTboyZHB
  • 2014年12月09日 16:57
  • 6787

自定义View:点、图片随手指而移动的View

自定义View:点、图片随手指而移动的View,例子很简单,算是入门的view练习。...
  • langxm2006
  • langxm2006
  • 2016年07月01日 23:03
  • 490

Android开发——自定义View之实现跟随手指移动的小球

案例: 实现的功能: 手指在屏幕上滑动,红色的小球始终跟随手指移动。 实现的思路: 1)自定义View,在onDraw中画圆作为小球; 2)重写自定义View的onTouchEvent方...
  • xy8199
  • xy8199
  • 2017年11月02日 09:35
  • 190

利用重写onTouchEvent方法实现view随手指移动效果

view随手指移动的多种实现方法
  • h55l55
  • h55l55
  • 2016年03月13日 12:00
  • 3533

Android-通过自定义View组件实现跟随手指移动的ImageView组件

在Android应用程序中绘制一个跟随手指的小兔子,当手指在屏幕上拖动时,小兔子将跟随手指拖动的轨迹移动。实现本实例时,首先需要先继承Android.view.View类,然后通过重写其onDraw(...
  • eva1994
  • eva1994
  • 2016年03月15日 11:36
  • 2143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义View(板块随手指移动)
举报原因:
原因补充:

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