android中自定义一个图形,单点移动缩小的效果

来源:互联网 发布:里海运河知乎 编辑:程序博客网 时间:2024/05/16 01:00
public class MainActivity extends Activity {    View view;    public static final int DRAG = 1;    public static final int SCALE = 2;    int mode = 1;    int height = 10, width = 10;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        getWindow().requestFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        view = findViewById(R.id.view);    }    float length = 1;    // 重写    @Override    public boolean onTouchEvent(MotionEvent event) {        int x = (int) event.getX();        int y = (int) event.getY();        // 多指触控        switch (event.getAction() & event.getActionMasked()) {        case MotionEvent.ACTION_DOWN:            mode = DRAG;            break;        case MotionEvent.ACTION_POINTER_DOWN:            Log.e("TAG", "多指移动");            mode = SCALE;            // 两个手指开始的长度是多少呢?            length = calc(event);            break;        case MotionEvent.ACTION_UP:            length = 1;            break;        case MotionEvent.ACTION_MOVE:            if (mode == DRAG) {                // 1. 单个手指                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(                        width, height);                params.setMargins(x, y, 0, 0);                view.setLayoutParams(params);            } else {                // 2. 两个手指                float beilv = calc(event) / length;                width = (int) (view.getWidth() * beilv);                height = (int) (view.getHeight() * beilv);                Log.e("TAG", beilv + "  " + width + "  " + height);                FrameLayout.LayoutParams params = (LayoutParams) view                        .getLayoutParams();                params.width = width;                params.height = height;                view.setLayoutParams(params);            }            break;        }        return true;    }    // 类 Ponint    public float calc(MotionEvent event) {        float x1 = event.getX();        float y1 = event.getY();        float x2 = event.getX(1);        float y2 = event.getY(1);        return (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));    }}
  • 1234567891011121171

xml类

<FrameLayout 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"    tools:context="com.example.lesson6_work1.MainActivity" >    <View        android:id="@+id/view"        android:layout_width="30dp"        android:layout_height="30dp"        android:background="@drawable/oval" /></FrameLayout>
  • 1
  • 25

自己在shape中定义的一个圆的oval.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">    <solid android:color="@android:color/holo_red_dark"/></shape>
  • 1256

用自定义View的方式实现单点触控时拖动图片,跟着拖动点走

QiuView 类

public class QiuView extends View {    Paint paint = new Paint();    PointF point = new PointF();    public QiuView(Context context) {        super(context);        paint.setColor(Color.RED);        paint.setAntiAlias(true);        paint.setDither(true);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawCircle(point.x, point.y, 50, paint);    }    //   触摸事件    @Override    public boolean onTouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_MOVE) {            point.set(event.getX(), event.getY());            invalidate();        }        return true;    }}效果图
阅读全文
0 0
原创粉丝点击