• 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;


  • 相关阅读:
    Python3学习笔记22-文件读写
    Python3学习笔记21-实例属性和类属性
    Python3学习笔记20-获取对象信息
    Python3学习笔记19-继承和多态
    Python3学习笔记18-访问限制
    Python3学习笔记17-类与实例
    Python3学习笔记16-错误和异常
    Python3学习笔记15-迭代器与生成器
    Python3学习笔记14-迭代与列表生成式
    Python3学习笔记13-函数的参数
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6985460.html
Copyright © 2020-2023  润新知