zoukankan      html  css  js  c++  java
  • imageview 全屏 拖动

    引用:http://www.eoeandroid.com/forum-viewthread-tid-69849-highlight.html

    1.素材

    res/drawable-hdpi/  目录下放四个jpg文件

    beijing1_b.jpg

    beijing2_b.jpg

    beijing3_b.jpg

    beijing4_b.jpg

    2.main.xml

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/linear"

    android:orientation="vertical"

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent"

    >

    <ImageButton android:layout_width="100dip"

    android:layout_height="100dip"

    android:src="@drawable/beijing1_b"/>

    <ImageButton android:layout_width="100dip"

    android:layout_height="100dip"

    android:src="@drawable/beijing2_b"/>

    <ImageButton android:layout_width="100dip"

    android:layout_height="100dip"

    android:src="@drawable/beijing3_b"/>

    <ImageButton android:layout_width="100dip"

    android:layout_height="100dip"

    android:src="@drawable/beijing4_b"/>

    </LinearLayout>

    3.java
    package com.zj;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    public class ImageViewMoveActivity extends Activity {
    private int point1;
    private int point2;
    private int startX;
    private int startY;
    private int p=4;
    private LinearLayout lLayout;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    lLayout = (LinearLayout)findViewById(R.id.linear);
    OnTouchListener touchListener = new OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event) {//定义OnTouchListener 用于监听所有动作 并注册LinearLayour的所有View 实现为:
    int action = event.getAction();
    int x = (int) event.getRawX();
    int y = (int) event.getRawY();
    switch(action){
    case MotionEvent.ACTION_DOWN://鼠标按下 拖拉动作开始
    point1 = v.getTop();
    startX = (int)event.getX();
    startY = y - v.getTop();
    break;
    case MotionEvent.ACTION_MOVE://鼠标移动 拖拉动作进行中
    v.layout(x - startX, y - startY, x + v.getWidth()- startX, y - startY + v.getHeight());
    v.bringToFront();
    v.postInvalidate();
    break;
    case MotionEvent.ACTION_UP://鼠标释放 拖拉动作结束
    point2 = v.getTop();
    int dest = getLocation(v);//计算插入位置 位于哪两个相邻View之间
    lLayout.removeView(v);//remove ori view, and then add view here
    lLayout.addView(v, dest);
    break;
    }
    return false;
    }
    };
    for(int i=0;i<lLayout.getChildCount();i++){
    ImageView iv = (ImageView)lLayout.getChildAt(i);//to listener all ImageView
    if(iv !=null){
    iv.setOnTouchListener(touchListener);
    }
    else {
    //error, view is null!
    }
    }
    }
    //4. getLocation(View) 用于: 根据目标View 判断待插入的位置 即:哪2个相邻ImageView 之间 实现为:
    public int getLocation(View v){
    for(int i=0;i<lLayout.getChildCount();i++){
    ImageView iv = (ImageView)lLayout.getChildAt(i);ImageView iv2 = (ImageView)lLayout.getChildAt(i+1);
    if(iv.getTop()< v.getTop() && iv2.getTop() > v.getTop()){
    //refer delta of point1 & point2
    if(point1 < point2){//drag to bottom
    return i+1;
    }
    else {//drag to up
    return i+1;
    }
    }
    }
    //otherwise return last location
    return lLayout.getChildCount()-1;
    }
    }

  • 相关阅读:
    Android 六种核心安全机制
    Android 网络通信 HTTP
    Android Thread和AsyncTask
    C#(少用的)
    Asp.net动态生成表单
    设计模式--职责链(学习)
    Extjs表单验证小结
    C#框架
    Javascript获取IFrame内容(兼容IE&FF)
    最近在忙淘宝店的事
  • 原文地址:https://www.cnblogs.com/sode/p/2128383.html
Copyright © 2011-2022 走看看