android动画-拖动
先上图看效果
实质上说是动画有点不妥,确切的说应该是手势的处理,废话不多说看代码
SimpleDragSample.java
public class SimpleDragSample extends Activity {
protected int contentTop;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_simpledrag) ;
DisplayMetrics dm = getResources().getDisplayMetrics() ;
final int screenWidth = dm.widthPixels ;
final int screenHeight = dm.heightPixels ;
Log.e("width,height", screenWidth + "," + screenHeight);
final Button _Button = (Button)findViewById(R.id.buttonDrag) ;
_Button.setOnTouchListener(new OnTouchListener() {
int lastX , lastY ;
boolean isDraging = false ;
@Override
public boolean onTouch(View v, MotionEvent event) {
int ea = event.getAction() ;
switch (ea) {
case MotionEvent.ACTION_DOWN:
isDraging = true ;
lastX = (int) event.getRawX() ;
lastY = (int) event.getRawY() ;
if(contentTop == 0) {
contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();//获取状态栏和标题栏的总高度
}
break;
case MotionEvent.ACTION_MOVE:
if(isDraging)
{
int dx = (int)event.getRawX() - lastX ;
int dy = (int)event.getRawY() - lastY ;
int l = v.getLeft() + dx ;
int b = v.getBottom() + dy ;
int r = v.getRight() + dx ;
int t = v.getTop() + dy ;
//推断超出屏幕
if(l<0)
{
l = 0 ;
r = v.getWidth() ;
}
if(t<0)
{
t = 0 ;
b = v.getHeight() ;
}
if(r>screenWidth)
{
r = screenWidth ;
l = r - v.getWidth() ;
}
if(b>screenHeight - contentTop)
{
b = screenHeight - contentTop ;
t = b - v.getHeight() ;
}
v.layout(l, t, r, b) ;
lastX = (int) event.getRawX() ;
lastY = (int) event.getRawY() ;
v.postInvalidate() ;
}
break ;
case MotionEvent.ACTION_UP:
isDraging = false ;
break ;
default:
break;
}
return false;
}
}) ;
}
}
layout_simpledrag.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/buttonDrag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
>
</Button> </RelativeLayout>
代码相对来说不是太复杂。这里就不多加解释了。仅仅说下开发过程中遇到的问题
1.view.getLeft、view.getRight、view.getTop、view.getBottom都是相对父view的位置。这里button的父view为我们定义的RelativeLayout,是不包含顶部状态栏和标题栏的。
这篇文章解说的非常具体
http://blog.csdn.net/androiddevelop/article/details/8373782
2.用下面代码測试我的小米手机(480*854)。获取的值为320*569
DisplayMetrics dm = getResources().getDisplayMetrics() ;
final int screenWidth = dm.widthPixels ;
final int screenHeight = dm.heightPixels ;
解决的方法:
注: density
不等于1的情况下,须要设置targetSdkVersion在4-9之间,比如
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="10" />
须要在project的AndroidManifest.xml文件里,增加supports-screens节点。详细的内容例如以下:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
研究之后发现,若没有设定多分辨率支持的话。Android系统会将240x320的低密度(120)和800x480以上的的高密度尺寸转换为中等密度(160)相应的尺寸
3.三种方式获取屏幕分辨率
(1)直接
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
(2)通过getResources()获取DisplayMetrics对象。
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
(3)通过getWindowManager()获取
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
android动画-拖动的更多相关文章
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- Android动画效果之Property Animation进阶(属性动画)
前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- Android动画效果之Frame Animation(逐帧动画)
前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...
- Android动画效果之Tween Animation(补间动画)
前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...
- Android动画
[浅谈Android动画] 总共四种:Tween Animation变换动画.Frame Animation帧动画 Layout Animation布局动画.Property Animation 属性 ...
- Android动画学习(二)——Tween Animation
前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- Android动画的理解
基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...
随机推荐
- About CNN(convolutional neural network)
NO.1卷积神经网络基本概念 CNN是第一个被成功训练的多层深度神经网络结构,具有较强的容错.自学习及并行处理能力.最初是为识别二维图像而设计的多层感知器,局部连接和权值共享网络结构 类似于生物神经网 ...
- 利用js自带函数 数组去重
<script> ,,]; //原数组 var a=[]; //定义空数组 arr.map(function(x){ //用 map 遍历数组 ){ //如果当前值没有存在空数组中 a.p ...
- VBA 中Dim含义
楼主是个初学者,在应用vba时遇到了dim方面的问题,查了很多资料后想把关于dim的这点儿知识简单整理出来 首先,从我遇到的问题作为切入点吧, (不得不承认我遇到的错误是很低级的) 具体的情境就不还原 ...
- POJ 1821 Fence(单调队列优化DP)
题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...
- 推荐学习《组织与管理研究的实证方法(第2版)》中文PDF
在写文章论文时,会涉及到观点论证,需要掌握一些实证方法. 建议学习<组织与管理研究的实证方法(第2版)>,对管理研究中涉及的方法进行了介绍,例如实验室研究,二手数据的研究,实地研究等,这对 ...
- python 比较数字大小按从大到小输出
主要用到的python 的知识点 1: 内置函数max 2: 列表的操作 3: while 循环 4 : 错误处理 代码如下: #!/usr/bin/python #coding=u ...
- Centos6.6 yum源更新
1备份: cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d//CentOS-Base.repo.ori 2下载: wget -O /etc/y ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- 洛谷 P1373 小a和uim之大逃离 (差值型dp总结)
这道题和多米诺骨牌那道题很像 ,都是涉及到差值的问题. 这道题是二维的,同时要取模. 这种题,因为当前的决策有后效性,会影响到差值,所以直接把 差值作为维度,然后计算答案的时候把差值为0的加起来就行了 ...
- [Javascript] String Padding in Javascript using padStart and padEnd functions
ES2017 added two new string functions. They are padStart and padEndfunctions. In this lesson, we wil ...