1. 程式人生 > >Android控制元件拖動實現

Android控制元件拖動實現

1.今天突然想到做個實現個控制元件拖動效果,就來試試,一查原來還是很簡單的

2.原理就是實現OnTouchLinstener,然後觸控式螢幕幕時改變控制元件的位置,當然了會有人問OnTouch與OnClick有什麼區別,百度搜一下就知道了,懶得說。。

3.廢話不多說直接看圖

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

4.當然了,筆者在點選和拖動的時候更改了ImageView的圖片,離開螢幕時恢復,很簡單,但很實用的一點,直接上程式碼吧

package com.xugongming38.dragview;

import android.content.Context;
import android.content.SharedPreferences;
import
android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; public class MainActivity extends AppCompatActivity implements View.OnTouchListener{ private ImageView iv_dv_view; private int sx; private
int sy; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (getSupportActionBar() != null){ getSupportActionBar().hide(); } sp = this
.getSharedPreferences("config", Context.MODE_PRIVATE); iv_dv_view = (ImageView) this.findViewById(R.id.iv_dv_view); sp = this.getSharedPreferences("config", Context.MODE_PRIVATE); iv_dv_view.setOnTouchListener(this); } @Override protected void onResume() { super.onResume(); } @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:// 獲取手指第一次接觸螢幕 sx = (int) event.getRawX(); sy = (int) event.getRawY(); iv_dv_view.setImageResource(R.drawable.t); break; case MotionEvent.ACTION_MOVE:// 手指在螢幕上移動對應的事件 int x = (int) event.getRawX(); int y = (int) event.getRawY(); // 獲取手指移動的距離 int dx = x - sx; int dy = y - sy; // 得到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); // 獲取移動後的位置 sx = (int) event.getRawX(); sy = (int) event.getRawY(); break; case MotionEvent.ACTION_UP:// 手指離開螢幕對應事件 // 記錄最後圖片在窗體的位置 int lasty = iv_dv_view.getTop(); int lastx = iv_dv_view.getLeft(); iv_dv_view.setImageResource(R.drawable.next); SharedPreferences.Editor editor = sp.edit(); editor.putInt("lasty", lasty); editor.putInt("lastx", lastx); editor.commit(); break; } break; } return true;// 不會中斷觸控事件的返回 } }

5.最後留一點筆記,關於ImageView的設定影象問題

void android.widget.ImageView.setImageResource(int resId) 
與xml中的src的屬性才是相匹配的

void android.view.View.setBackgroundResource(int resid)與xml中的background的屬性才是相匹配的, 
//從名字就看出來了。

相關推薦

Android控制元件實現

1.今天突然想到做個實現個控制元件拖動效果,就來試試,一查原來還是很簡單的 2.原理就是實現OnTouchLinstener,然後觸控式螢幕幕時改變控制元件的位置,當然了會有人問OnTouch與OnClick有什麼區別,百度搜一下就知道了,懶得說。。 3.廢

WPF實現控制元件

實現控制元件拖動的基本原理是對滑鼠位置的捕獲,同時根據滑鼠按鍵的按下、釋放確定控制元件移動的幅度和時機。 簡單示例: 在Grid中有一個Button,通過滑鼠事件改編Button的Margin屬性,

Android控制元件TextView的實現原理分析

                        在前面一個系列的文章中,我們以視窗為單位,分析了WindowManagerService服務的實現。同時,在再前面一個系列的文章中,我們又分析了視窗的組成。簡單來說,視窗就是由一系列的檢視按照一定的佈局組織起來的。實際上,每一個檢視都是一個控制元件,這些控制可以

控制元件後,某些事件引起的佈局重置或位置還原問題

自定義了一個imageview控制元件,可以隨意拖動和縮放。 遇到了一個棘手的問題,就是每當拖動完控制元件以後,執行某些操作的時候(比如說觸發虛擬鍵盤),該控制元件的位置就會還原到初始位置。 經過嘗試,問題已經解決, 解決方法是:捕捉ACTION_UP動作,當發現這個動作

安卓控制元件

/** 此文主要有兩大要點 1.控制元件的拖動 2.控制元件同時實現點選事件與拖動事件時的衝突處理 要點地方都有註釋 */ public class extents Activity{ /** Called when the activity is first create

JS 實現控制元件拽/

下面是實現控制元件拖拽的完整程式碼。 (function ($) { var move = false; //標記控制元件是否處於被拖動狀態 var dragOffsetX = 0; //控制元件左邊界和滑鼠X軸的差

android自定義星級評分控制元件,可實現只顯示實心星星

話不多說,上圖 近日app需求弄一個等級展示,看了下UI圖,只顯示實星(點亮的星星).如圖 但是網上關於星級評分的例子大多這樣 也展示虛心星星 通過自定義View package com.starsbar; import android.content.C

Android控制元件RecyclerView實現橫向滑動、瀑布流。

在開發的過程中,我們經常使用ListView控制元件,但是ListView也有它的缺點,就是它不能夠左右滑動資料,執行效率不高; 所以我們可以使用更強大的控制元件RecyclerView,可以說它是一個增強版的ListView,Google推薦使用,那就簡單的

Android控制元件GridView實現分割線

大家都知道Android ListView設定分割線很簡單,設定如下兩個屬性即可:     android:divider     android:dividerHeight GirdView預設是沒有網格線的,那麼該如何設定呢? 現介紹兩種方法: 第一、設定垂直、橫向間距

Android SeekBar 禁止和點選的實現(可能是最簡單完美的實現

在播放線上音訊時,需求是不能拖動進度條,讓音訊自然播放。 實現就很簡單了,不要和網上的那樣重寫onTouchEvent,沒有必要的,所以一定要了解Android的觸控機制。 直接監聽SeekBar

Android實現(一個流暢的排序DragSortGridView,自動滾屏)

/** * Copyright (C), 2008-2015, Huawei Tech. Co., Ltd. * <p/> * Description : 拖動排序佈局 * * @version V100R001 * @since V100R001 */ @SuppressLint(

Android RecycerView 中根據圖片大小自適應控制元件大小的實現

問題 recyclerView中 item有ImageView,ImageView大小根據圖片大小而改變大小 解決方案 GlideApp.with(mContext)

Android控制元件GridView之仿支付寶錢包首頁帶有分割線的GridView九宮格的完美實現

部落格時間:2015-02-04 15:03 今天我們來模仿一下支付寶錢包首頁中帶有分割線的GridView,俗稱九宮格。先上圖,是你想要的效果麼?如果是請繼續往下看。                                               

Android自定義元件之日曆控制元件-精美日曆實現(內容、樣式可擴充套件)

需求 我們知道,Android系統本身有自帶的日曆控制元件,網路上也有很多開源的日曆控制元件資源,但是這些日曆控制元件往往樣式較單一,API較多,不易於在實際專案中擴充套件並實現出符合具體樣式風格的,內容可定製的效果。本文通過自定義日曆控制元件,實現了在內容和樣

Android 5.x新增控制元件之--TabLayout實現左右滑動導航選單

1.效果圖(用來和Viewpager結合使用來作為Viewpager的選項卡。) 2.使用方式 builde.gride檔案中新增下面的依賴,compile'com.android.support:design:22.2.0'//可修改版本號為對應的buildToolsV

頁面中可控制元件的簡單實現方案

頁面中可拖拽控制元件的簡單實現,可直接一句話實現. 核心程式碼邏輯類如下: import android.animation.ObjectAnimator; import android.view.MotionEvent; import andr

Android UI控制元件之Spinner實現省市區三級聯動

城市資訊我將他放在strings.xml檔案中,具體就不給出了,資訊太大了 主xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xml

Android 控制元件陰影實現

讓 View 產生陰影有以下 4 種方式: 控制 elevation 使用 OutlineProvider 使用 9 圖 使用 MD 風格的控制元件,如 CardView,FloatingActionButton 0.Z軸的概念 Android 在 5.0 及以後採用了 Mate

Android自定義控制元件BannerLayout,實現廣告輪播

Android自定義廣告輪播圖 自定義的BannerLayout,通過ViewPager來實現,配合Glide 實現本地以及網路圖片的載入。 效果: 專案結構: 在build.gradle中新增對Glide (圖片載入框架)的引用: compile 'c

C++ Builder 實現控制元件放操作

5.1 實現控制元件拖放操作 拖放是使用者操縱物件的常用的方法。使用者可拖動整個控制元件,或將某一個控制元件(如列表框或樹狀檢視)中的項拖動到另一個控制元件中。 · 開始拖動操作。 ·