国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程之控件可拖動的實現方法

2020-04-11 10:47:38
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枣阳市| 文成县| 安岳县| 新蔡县| 普兰店市| 赤水市| 湘乡市| 炎陵县| 民县| 长治县| 南木林县| 长沙县| 贡觉县| 丰城市| 得荣县| 新平| 抚顺市| 武穴市| 乐陵市| 宝山区| 绥芬河市| 长武县| 吐鲁番市| 黄龙县| 石首市| 宣城市| 肃宁县| 黑水县| 昌平区| 淄博市| 高碑店市| 永善县| 科技| 黎川县| 永平县| 兴海县| 彭山县| 新余市| 晋城| 唐山市| 武川县|