• Android 简单实现控件的拖动


    控件的拖动,使用到一个监听事件

    setOnTouchListener:
    XML代码:
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     xmlns:app="http://schemas.android.com/apk/res-auto"
     5     xmlns:tools="http://schemas.android.com/tools"
     6     android:layout_width="match_parent"
     7     android:layout_height="match_parent"
     8     tools:context=".MainActivity">
     9 
    10     <ImageView
    11         android:id="@+id/textview"
    12         android:src="@drawable/ic_launcher_foreground"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:background="@color/colorPrimaryDark"
    16         android:text="www.baidu.com"/>
    17 
    18 </LinearLayout>

    JAVA代码

    
    
     1 package com.example.a11658.textviewdrag;
     2 
     3 import android.annotation.SuppressLint;
     4 import android.os.Bundle;
     5 import android.support.v7.app.AppCompatActivity;
     6 import android.view.MotionEvent;
     7 import android.view.View;
     8 import android.widget.ImageView;
     9 
    10 public class MainActivity extends AppCompatActivity {
    11     private ImageView tv;
    12     private int x;
    13     private int y;
    14 
    15     @SuppressLint("ClickableViewAccessibility")
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.activity_main);
    20 
    21         tv = findViewById(R.id.textview);
    22         tv.setOnTouchListener(new View.OnTouchListener() {
    23             @Override
    24             public boolean onTouch(View v, MotionEvent event) {
    25                 switch (event.getAction()) {
    26                     case MotionEvent.ACTION_DOWN:
    27                         //手指按下
    28                         //获取第一次接触屏幕
    29                         x = (int) event.getRawX();
    30                         y = (int) event.getRawY();
    31                         break;
    32                     case MotionEvent.ACTION_MOVE:
    33                         //手指拖动
    34                         //获取距离差
    35                         int dx = (int) event.getRawX() - x;
    36                         int dy = (int) event.getRawY() - y;
    37                         //更改Imageview在窗体的位置
    38                         v.layout(v.getLeft() + dx, v.getTop() + dy,
    39                                 v.getRight() + dx, v.getBottom() + dy);
    40                         //获取移动后的位置
    41                         x = (int) event.getRawX();
    42                         y = (int) event.getRawY();
    43                         break;
    44                     case MotionEvent.ACTION_UP:
    45                         //手指弹起
    46                         x = (int) event.getRawX();
    47                         y = (int) event.getRawY();
    48                         break;
    49                 }
    50                 return true;
    51             }
    52         });
    53     }
    54 }

    view.layout(left, top, right, bottom)实现拖动。

    1.按下图搞懂几个坐标

    视图宽度 view.getWidth();

    视图高度 view.getHeight() 

    橘色线:view.getLeft()

    蓝色线:view.getRight()

    红色线:view.getTop()

    粉色线:view.getBottom()

    上下左右的偏移都是相对于(0.0)来说

    Demo地址:https://github.com/1165863642/WidgetDrag

  • 相关阅读:
    sql server 中拥有相同字段值的记录某个字段合并问题解答
    一个SQL语句实例
    Sql server 2005中output用法解析
    SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)转载
    .NET/C#中对对象集合进行查询的方法 以及相关的 Predicate<T> 及 Action<T> 的用法
    SQLServer Case具有两种格式:简单Case函数和Case搜索函数
    sql server compute by 子句用法实例
    vs2008 一件悲剧的事情
    SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)
    SQL Server2005中四种排名函数的使用
  • 原文地址:https://www.cnblogs.com/MrChen-/p/10304188.html
Copyright © 2020-2023  润新知