Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android動畫-拖動

android動畫-拖動

編輯:關於Android編程

先上圖看效果

\

實質上說是動畫有點不妥,確切的說應該是手勢的處理,廢話不多說看代碼<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+U2ltcGxlRHJhZ1NhbXBsZS5qYXZhPGJyPgo8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush: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




    


代碼相對來說不是太復雜,這裡就不多加解釋了,只說下開發過程中遇到的問題

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之間,例如


需要在工程的AndroidManifest.xml文件中,加入supports-screens節點,具體的內容如下:
研究之後發現,若沒有設定多分辨率支持的話,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;


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved