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