自定义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:点、图片随手指而移动的View

自定义View:点、图片随手指而移动的View,例子很简单,算是入门的view练习。...

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

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

js,jQuery实现拖拽自定义移动端板块,web移动端开发

由于项目需求,需要一个能排版移动端页面布局的插件,因此,作为前端的就首当其任了 一般情况下写代码,时间充足我都会先写一遍原生JS 效果,实例代码如下css : ...

android自定义数据展示view,随手指滑动实现

效果: 图像会随着手指左右移动,就这个效果,很简单。 源代码地址: https://github.com/SunPointed/ShowDataViewDemo 思路: 重点在于对...

Android 自定义View之随手指滑动的ToggleButton

因为项目里需要可滑动的ToggleButton,就去网上搜了一下,下载了两个例子看下,一个是仿ios6.0的滑动效果,虽说是滑动,但不是我想要的样式,还有一个是使用的facebook开源框架rebou...

自定义随手指拖动的View

项目中遇到一个可随意跟随手指拖动的电话按钮,网上一搜基本上都是,先在布局文件中写一个button或ImageView,然后找到这个控件,重写ontouch方法,并不是我想要的,然后就自定义一个可随手机...

自定义View画圆随指标移动_eclipse

  • 2016年10月11日 14:58
  • 1.49MB
  • 下载

自定义view的缩放移动功能

  • 2015年03月20日 17:09
  • 1.5MB
  • 下载

通达信行业、板块与自定义指数 (2015-09-01 17:58:00)

来源:醉眠春晓的博客      http://blog.sina.com.cn/s/blog_623d2d280102vt8y.html 本文综合了从网络上搜集资料,描述了通达信股票软件中...
  • Winsky
  • Winsky
  • 2017年08月05日 07:51
  • 257

自定义Behavior实现底部View的平移动画

通过自定义Behavior实现底部View像Toolbar一样的显示隐藏动画
  • Mtee_Yu
  • Mtee_Yu
  • 2016年11月08日 13:28
  • 397
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义View(板块随手指移动)
举报原因:
原因补充:

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