Android編程之控制項可拖動的實現方法_Android

來源:互聯網
上載者:User

本文執行個體講述了Android編程之控制項可拖動的實現方法。分享給大家供大家參考,具體如下:

點擊和觸摸的區別是什麼?

點擊: 一組動作的集合 手指按下著按鈕 手指要在按鈕停留一段時間 手指離開按鈕

private static final String TAG = "DragViewActivity";private ImageView iv_dv_view;private TextView tv_drag_view;private int startx;private int starty;private SharedPreferences sp;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    requestWindowFeature(Window.FEATURE_NO_TITLE);    setContentView(R.layout.dragview);//   Drawable drawable = new ColorDrawable(color.transparent);//   getWindow().setBackgroundDrawable(drawable);    iv_dv_view = (ImageView) this.findViewById(R.id.iv_dv_view);    tv_drag_view = (TextView) this.findViewById(R.id.tv_drag_view);    sp = this.getSharedPreferences("config", Context.MODE_PRIVATE);    iv_dv_view.setOnTouchListener(this);  }  @Override  protected void onResume() {    super.onResume();    int x = sp.getInt("lastx", 0);    int y = sp.getInt("lasty", 0);//   iv_dv_view.layout(iv_dv_view.getLeft() + x, iv_dv_view.getTop() + y,//       iv_dv_view.getRight() + x, iv_dv_view.getBottom() + y);//   iv_dv_view.invalidate();//介面重新渲染    LayoutParams params = (LayoutParams) iv_dv_view.getLayoutParams();    params.leftMargin = x;    params.topMargin = y;    iv_dv_view.setLayoutParams(params);  }  @Override  public boolean onTouch(View v, MotionEvent event) {    switch (v.getId()) {    // 如果手指放在imageView上拖動    case R.id.iv_dv_view:      // event.getRawX(); //擷取手指第一次接觸螢幕在x方向的座標      switch (event.getAction()) {      case MotionEvent.ACTION_DOWN:// 擷取手指第一次接觸螢幕        startx = (int) event.getRawX();        starty = (int) event.getRawY();        break;      case MotionEvent.ACTION_MOVE:// 手指在螢幕上移動對應的事件        int x = (int) event.getRawX();        int y = (int) event.getRawY();        if (y < 400) {          // 設定TextView在表單的下面          tv_drag_view.layout(tv_drag_view.getLeft(), 420,              tv_drag_view.getRight(), 440);        } else {          tv_drag_view.layout(tv_drag_view.getLeft(), 60,              tv_drag_view.getRight(), 80);        }        // 擷取手指移動的距離        int dx = x - startx;        int dy = y - starty;        // 得到imageView最開始的各頂點的座標        int l = iv_dv_view.getLeft();        int r = iv_dv_view.getRight();        int t = iv_dv_view.getTop();        int b = iv_dv_view.getBottom();        // 更改imageView在表單的位置        iv_dv_view.layout(l + dx, t + dy, r + dx, b + dy);        // 擷取移動後的位置        startx = (int) event.getRawX();        starty = (int) event.getRawY();        break;      case MotionEvent.ACTION_UP:// 手指離開螢幕對應事件        Log.i(TAG, "手指離開螢幕");        // 記錄最後圖片在表單的位置        int lasty = iv_dv_view.getTop();        int lastx = iv_dv_view.getLeft();        Editor editor = sp.edit();        editor.putInt("lasty", lasty);        editor.putInt("lastx", lastx);        editor.commit();        break;      }      break;    }    return true;// 不會中斷觸摸事件的返回}

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:background="#cc000000" ><ImageView   android:layout_width="160dip"   android:layout_height="60dip"   android:background="@drawable/button_background_selected"   android:id="@+id/iv_dv_view"  /> <TextView   android:id="@+id/tv_drag_view"   android:layout_marginTop="80dip"   android:layout_width="fill_parent"   android:layout_height="20dip"   android:text="按住綠色條拖動歸屬地顯示的位置"   /></RelativeLayout>

觸摸: 手指一挨著螢幕 手指移動 手指離開螢幕

更多關於Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android通訊方式總結》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控制項用法總結》

希望本文所述對大家Android程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.