自定义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练习。

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

自定义随手指拖动的View

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

android自定义view实现可自由放大缩小和移动的imageView

本自定义的ZoomImageView实现的功能有: 多指触摸以中心点自由放大缩小,图片整体默认居中于控件中,双击放大缩小并防止出现白边;代码如下

自定义View之图片放大、缩小、移动

刚开始接触自定义View的时候决定

自定义view-仿移动扇形进度条

效果图如下:                          一.图形的拆解             ...

【Android】利用自定义View的重绘实现拖动移动,获取组件的尺寸

下面利用一个app来说明如何利用自定义View的重绘实现拖动移动,获取组件的尺寸。 如下图,触摸拖动,或者轻轻点击屏幕都能移动图片。如果碰到文字,则会弹出提示。 这里是利用自定义View的...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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