Android可移动的Button

关键

 1 package com.example.administrator.mystudent.ButtonMove;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.util.DisplayMetrics;
 6 import android.util.Log;
 7 import android.view.MotionEvent;
 8 import android.view.View;
 9 import android.widget.Button;
10 import android.widget.Toast;
11
12 import com.example.administrator.mystudent.R;
13
14 public class ButtonMoveActivity extends Activity {
15
16     private Button btn1;
17     private int screenWidth;
18     private int screenHeight;
19
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_button_move);
24
25         //DisplayMetrics取屏幕大小分辨率
26         DisplayMetrics dm=getResources().getDisplayMetrics();
27         screenWidth=dm.widthPixels;
28         screenHeight=dm.heightPixels-50;
29
30         btn1 = (Button) findViewById(R.id.btn1);
31         btn1.setOnTouchListener(new MyOnTouchListener());
32
33     }
34
35     class MyOnTouchListener implements View.OnTouchListener {
36         int lastX,lastY;
37
38         @Override
39         public boolean onTouch(View v, MotionEvent event) {
40             int ea=event.getAction();
41             Log.i("TAG", "Touch:"+ea);
42
43             switch(ea){
44                 case MotionEvent.ACTION_DOWN:
45
46                     lastX=(int)event.getRawX();//获取触摸事件触摸位置的原始X坐标
47                     lastY=(int)event.getRawY();
48                     break;
49
50                 case MotionEvent.ACTION_MOVE:
51                     int dx=(int)event.getRawX()-lastX;
52                     int dy=(int)event.getRawY()-lastY;
53
54                     int l=v.getLeft()+dx;
55                     int b=v.getBottom()+dy;
56                     int r=v.getRight()+dx;
57                     int t=v.getTop()+dy;
58
59                     //下面判断移动是否超出屏幕
60                     if(l<0){
61                         l=0;
62                         r=l+v.getWidth();
63                     }
64
65                     if(t<0){
66                         t=0;
67                         b=t+v.getHeight();
68                     }
69
70                     if(r>screenWidth){
71                         r=screenWidth;
72                         l=r-v.getWidth();
73                     }
74
75                     if(b>screenHeight){
76                         b=screenHeight;
77                         t=b-v.getHeight();
78                     }
79                     v.layout(l, t, r, b);
80
81                     lastX=(int)event.getRawX();
82                     lastY=(int)event.getRawY();
83                     Toast.makeText(getApplicationContext(),
84                             "当前位置:"+l+","+t+","+r+","+b,
85                             Toast.LENGTH_SHORT).show();
86
87                     //利用invalidate()刷新界面(加post多线程)
88                     v.postInvalidate();
89                     break;
90                 case MotionEvent.ACTION_UP:
91                     break;
92             }
93             return false;
94         }
95     }
96
97 }
时间: 2024-07-29 00:48:44

Android可移动的Button的相关文章

解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题

解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http://blog.csdn.net/u012336923/article/details/48289485 /路径/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/res/values-v23/v

Android控件之Button(按钮控件)和ImageButton(图片按钮控件)

一.Button和ImageButton特证: 1.共同特证: 都可以作为一个按钮产生点击事件 2.不同特证: Button有text的属性,ImageButton没有 ImageButton有src属性,Button没有 二.布局文件中设置Button和ImageButton控件 <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_heigh

android shape图形优化Button效果

android shape可以让我们通过定义xml文件的方式创建图形,当然只能实现一些比较简单的图形(圆形,矩形,椭圆,线段),但是已经相当不错了,通过shape创建的图形作为控件的背景已经基本可以满足我的简单需求了,而且通过shape创建的图形可以适配各种屏幕. 下面就用shape定义的图形来优化Button的整体效果. 定义主布局文件activity_main.xml: 1 <RelativeLayout xmlns:android="http://schemas.android.co

Android疑惑篇------------含有button按钮的ListView中,列表项无法获取焦点的问题

问题描述: 有过在ListView的列表项中添加按钮的朋友对这个问题一定不会陌生,我们的Demo在运行时,会出现这样的情况----------可以获取到列表项中的按钮点击事件,但是当我们想要获取整个列表项的点击事件时,就会发现此时点击列表项是没有任何反应的.为什么呢? 原因就是当在ListView中加入Button这类的有 “点击” 事件的widget时,ListView的itemclick事件将会被其它widget的click事件屏蔽,从而无法触发. 我们先来看一下列表项的XML文件 <?xm

android:TextAppearance.Material.Widget.Button.Inverse找不到或者报错问题

前两天将android sdk升到android6.0后出现Error retrieving parent for Item - AppCompact-v7 23 或者无法解析 android:TextAppearance.Material.Widget.Button.Inverse 和 android:Widget.Material.Button.Colored 找不到 解决办法有两种: 其一:将android6.0所涉及到的appcompat-v7和sdk全部下载(需要FQ),但是下载好后在

Android listview中使用button解决方法

其实很多东西不是粘贴代码就能解决的,做任何事都要用心做,这样才能晚上睡觉睡得比较踏实. 当你粘贴别人的代码,有时候出bug真的很烦,可是当你明白点原理的时候,能看出问题的实质,解决起来也很得心应手,开始今天的主题.当你的看到这个问题时,你应该知道问题出在哪里了,在listview中使用button(当然不只是button,还有imagebutton等自身响应点击的view),问题出现了,你会发现listview中的item不能点击了,具体是因为什么呢?大多数原因是抢焦点,button抢占了ite

Android 更改按钮样式 Button Styles

extends:http://stackoverflow.com/questions/26346727/android-material-design-button-styles   I will add my answer since I don't use any of the other answers provided. With the Support Library v7, all the styles are actually already defined and ready t

Android开发 更改返回button的图标

非常多的Android应用左上角都有返回button 在默认的情况下 ADT会默认给一个返回图标 而作为开发需求 非常多都要求定制一个新的图标 在Android的站点上 发现了2种能够更改的方法 1. 在java代码环境中设置 actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.back); 假设有错误提示 Call req

Android自定义控件系列(一)—Button七十二变

转载请注明出处:http://www.cnblogs.com/landptf/p/6290791.html 忙了一段时间,终于有时间整理整理之前所用到的一些知识,分享给大家,希望给同学们有些帮助,同时也是对自己的知识有个巩固的过程. 在Android的开发中比较常用的控件就是Button了,但是我们平时使用Button时是怎样来设置按下和抬起显示不同的效果呢?我想一般的实现方式就是定义一个selector的xml文件,然后在里面根据不同的state来设置不同的图片,但是当Button控件非常多的

Android常用UI组件 - Button

按钮(Button)是Android当中一个常用的UI组件,很小但是在开发中最常用到.一般通过与监听器结合使用,从而触发一些特定事件. Button继承了TextView.它的功能就是提供一个按钮,这个按钮可以供用户点击,当用户对按钮进行操作的时候,触发相应事件,如点击,触摸.一 般对于一个按钮而言,用的最多的就是点击事件,Button间接继承自View,而Android UI中的所有事件,都是定义在View中的. 实例:ButtonDemo 运行效果: 代码清单: 布局文件:main.xml