導航:首頁 > 操作系統 > android拖拽

android拖拽

發布時間:2022-04-13 18:36:48

android 里怎麼隨意拖動按鈕

可參考如下代碼即可:

java"><LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>

⑵ android布局 按鈕不能 自由拖動

因為你的layout類型選了linearlayout或者gridlayout了對不對。。。
如果想要拖動,建議換成releativelayout

不要用拖動按鈕的方法去布局。正經的布局都是在xml里敲代碼的。拖動這個習慣該改改了。

⑶ android中monkeyrunner如何實現drag()

使用此方法:com.android.monkeyrunner.MonkeyDevice.drag
模擬設備屏幕上拖動(觸摸,持有和移動)參數:

開始
-
拖動起點(以像素為單位元組(X,Y))

結束
-
阻力終點(以像素為單位元組(X,Y)

時間
-
在幾秒鍾內拖時間(默認為1.0秒)

步驟
-
插值點時要採取的步驟。
(默認是10)返回:返回任何內容。
使用adb命令:詳細的adb命令,可以通過adb
-h來查詢.而Monkeyrunner中對設備的操作如下: from
com.android.monkeyrunner
import
MonkeyRunner,MonkeyDevice
device
=
MonkeyRunner.waitForConnection(5,"emulator-5554")
device.shell("am
start
-an
com.xxx.xxx/.MainActivity")
device.touch(250,
450,
'DOWN_AND_UP')
device.drag((1080/2,
1700),(1080/2,
400),0.5,1)

⑷ android webview如何拖動網頁中的可拖動元素 如div

jsp +android+webview

⑸ 安卓launcher怎麼實現對桌面圖標的拖拽的

文件很多路徑有,請確保修改到正確的文件,例如)mediatek/operator/有)這個文件會配置hotseat的圖標,默認不會配置screen為2的位置,這是原來的allappbutton,做了此客制化後就需要配置screen2,而不能配置screen4,因此,請對應修改原來4個hotseat圖標的screenid,從0到3.

⑹ android裡面有沒有可以上下左右流暢拖動的控制項

lz的問題可以用一張圖片來解決,就像地圖應用一樣,有個開源項目,photoview,github上自己找一下。

⑺ android開發,如何實現將一個按鈕拖動到某個固定圖片的位置後,跳轉到另一個界面

按鈕其實用imageview也能用的吧?,給imageview做一個touch點擊事件之後,你手指拖動,坐標就會改變,拖動到你固定的坐標區域時,用intent來跳轉頁面

⑻ android 拖動imageview 如果沒有拖動到指定的位置 返回到起點怎麼實現

點擊imageview,加一個邊框,再點擊,取消邊框。拖動imageview,可以停在移動結束之後的位置上,而不是彈回移動之前的位置。

請問有什麼好的實現辦法。

public class MainActivity extends Activity {

private int screenWidth;
private int screenHeight;
private ImageView bgview;
private ImageView photoview;

private TextView txtview;

int top, right, bottom, left;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

DisplayMetrics dm = getResources().getDisplayMetrics();

screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - 50;

bgview = (ImageView) findViewById(R.id.bgview);
photoview = (ImageView) findViewById(R.id.photoview);

photoview.setOnTouchListener(new TouchHandler());
photoview.setOnClickListener(new ClickHandler());

}

class TouchHandler implements OnTouchListener{

int lastX , lastY, dx, dy;

@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:

// if(mode == NONE)
// if(dx < 2 && dy < 2)
{
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
}
break;

case MotionEvent.ACTION_MOVE:
dx = (int) event.getRawX() - lastX;
dy = (int) event.getRawY() - lastY;

// if(mode == DRAG)
{

// photoview.setBackgroundResource(R.drawable.img_border);

left = v.getLeft() + dx;
top = v.getTop() + dy;
right = v.getRight() + dx;
bottom = v.getBottom() + dy;

if(left < 0)
{
left = 0;
right = left + v.getWidth();
}

if(right > screenWidth)
{
right = screenWidth;
left = right - v.getWidth();
}

if(top < 0)
{
top = 0;
bottom = top + v.getHeight();
}

if(bottom > screenHeight)
{
bottom = screenHeight;
top = bottom - v.getHeight();
}

v.layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();

}
break;

case MotionEvent.ACTION_UP:

break;
}
if(dx < 2 && dy < 2)
{
return false;
}

return true;

}

}

class ClickHandler implements OnClickListener{

@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.photoview:
if( null == photoview.getBackground())
{
photoview.setBackgroundResource(R.drawable.img_border);

}else{
photoview.setBackgroundDrawable(null);

}
break;

}
v.layout(left, top, right, bottom);
System.out.println("left===" + left);
System.out.println("top===" + top);
}

}
}

⑼ android 如何實現邊緣拖動側滑

據需求需要自己自定義一個ListView來實現該功能,接下來先貼出代碼再講解具體的實現

package com.example.slidecutlistview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Scroller;

/**
* @blog http://blog.csdn.net/xiaanming
*
* @author xiaanming
*
*/
public class SlideCutListView extends ListView {
/**
* 當前滑動的ListViewposition
*/
private int slidePosition;
/**
* 手指按下X的坐標
*/
private int downY;
/**
* 手指按下Y的坐標
*/
private int downX;
/**
* 屏幕寬度
*/
private int screenWidth;
/**
* ListView的item
*/
private View itemView;
/**
* 滑動類
*/
private Scroller scroller;
private static final int SNAP_VELOCITY = 600;
/**
* 速度追蹤對象
*/
private VelocityTracker velocityTracker;
/**
* 是否響應滑動,默認為不響應
*/
private boolean isSlide = false;
/**
* 認為是用戶滑動的最小距離
*/
private int mTouchSlop;
/**
* 移除item後的回調介面
*/
private RemoveListener mRemoveListener;
/**
* 用來指示item滑出屏幕的方向,向左或者向右,用一個枚舉值來標記
*/
private RemoveDirection removeDirection;

// 滑動刪除方向的枚舉值
public enum RemoveDirection {
RIGHT, LEFT;
}

public SlideCutListView(Context context) {
this(context, null);
}

public SlideCutListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public SlideCutListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
screenWidth = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
scroller = new Scroller(context);
mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}

/**
* 設置滑動刪除的回調介面
* @param removeListener
*/
public void setRemoveListener(RemoveListener removeListener) {
this.mRemoveListener = removeListener;
}

/**
* 分發事件,主要做的是判斷點擊的是那個item, 以及通過postDelayed來設置響應左右滑動事件
*/
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
addVelocityTracker(event);

// 假如scroller滾動還沒有結束,我們直接返回
if (!scroller.isFinished()) {
return super.dispatchTouchEvent(event);
}
downX = (int) event.getX();
downY = (int) event.getY();

slidePosition = pointToPosition(downX, downY);

// 無效的position, 不做任何處理
if (slidePosition == AdapterView.INVALID_POSITION) {
return super.dispatchTouchEvent(event);
}

// 獲取我們點擊的item view
itemView = getChildAt(slidePosition - getFirstVisiblePosition());
break;
}
case MotionEvent.ACTION_MOVE: {
if (Math.abs(getScrollVelocity()) > SNAP_VELOCITY
|| (Math.abs(event.getX() - downX) > mTouchSlop && Math
.abs(event.getY() - downY) < mTouchSlop)) {
isSlide = true;
}
break;
}
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
break;
}

return super.dispatchTouchEvent(event);
}

/**
* 往右滑動,getScrollX()返回的是左邊緣的距離,就是以View左邊緣為原點到開始滑動的距離,所以向右邊滑動為負值
*/
private void scrollRight() {
removeDirection = RemoveDirection.RIGHT;
final int delta = (screenWidth + itemView.getScrollX());
// 調用startScroll方法來設置一些滾動的參數,我們在computeScroll()方法中調用scrollTo來滾動item
scroller.startScroll(itemView.getScrollX(), 0, -delta, 0,
Math.abs(delta));
postInvalidate(); // 刷新itemView
}

/**
* 向左滑動,根據上面我們知道向左滑動為正值
*/
private void scrollLeft() {
removeDirection = RemoveDirection.LEFT;
final int delta = (screenWidth - itemView.getScrollX());
// 調用startScroll方法來設置一些滾動的參數,我們在computeScroll()方法中調用scrollTo來滾動item
scroller.startScroll(itemView.getScrollX(), 0, delta, 0,
Math.abs(delta));
postInvalidate(); // 刷新itemView
}

/**
* 根據手指滾動itemView的距離來判斷是滾動到開始位置還是向左或者向右滾動
*/
private void scrollByDistanceX() {
// 如果向左滾動的距離大於屏幕的三分之一,就讓其刪除
if (itemView.getScrollX() >= screenWidth / 3) {
scrollLeft();
} else if (itemView.getScrollX() <= -screenWidth / 3) {
scrollRight();
} else {
// 滾回到原始位置,為了偷下懶這里是直接調用scrollTo滾動
itemView.scrollTo(0, 0);
}

}

/**
* 處理我們拖動ListView item的邏輯
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isSlide && slidePosition != AdapterView.INVALID_POSITION) {
addVelocityTracker(ev);
final int action = ev.getAction();
int x = (int) ev.getX();
switch (action) {
case MotionEvent.ACTION_MOVE:
int deltaX = downX - x;
downX = x;

// 手指拖動itemView滾動, deltaX大於0向左滾動,小於0向右滾
itemView.scrollBy(deltaX, 0);
break;
case MotionEvent.ACTION_UP:
int velocityX = getScrollVelocity();
if (velocityX > SNAP_VELOCITY) {
scrollRight();
} else if (velocityX < -SNAP_VELOCITY) {
scrollLeft();
} else {
scrollByDistanceX();
}

recycleVelocityTracker();
// 手指離開的時候就不響應左右滾動
isSlide = false;
break;
}

return true; // 拖動的時候ListView不滾動
}

//否則直接交給ListView來處理onTouchEvent事件
return super.onTouchEvent(ev);
}

@Override
public void computeScroll() {
// 調用startScroll的時候scroller.computeScrollOffset()返回true,
if (scroller.computeScrollOffset()) {
// 讓ListView item根據當前的滾動偏移量進行滾動
itemView.scrollTo(scroller.getCurrX(), scroller.getCurrY());

postInvalidate();

// 滾動動畫結束的時候調用回調介面
if (scroller.isFinished()) {
if (mRemoveListener == null) {
throw new NullPointerException(RemoveListener is null, we should called setRemoveListener());
}

itemView.scrollTo(0, 0);
mRemoveListener.removeItem(removeDirection, slidePosition);
}
}
}

/**
* 添加用戶的速度跟蹤器
*
* @param event
*/
private void addVelocityTracker(MotionEvent event) {
if (velocityTracker == null) {
velocityTracker = VelocityTracker.obtain();
}

velocityTracker.addMovement(event);
}

/**
* 移除用戶速度跟蹤器
*/
private void recycleVelocityTracker() {
if (velocityTracker != null) {
velocityTracker.recycle();
velocityTracker = null;
}
}

/**
* 獲取X方向的滑動速度,大於0向右滑動,反之向左
*
* @return
*/
private int getScrollVelocity() {
velocityTracker.computeCurrentVelocity(1000);
int velocity = (int) velocityTracker.getXVelocity();
return velocity;
}

/**
*
* 當ListView item滑出屏幕,回調這個介面
* 我們需要在回調方法removeItem()中移除該Item,然後刷新ListView
*
* @author xiaanming
*
*/
public interface RemoveListener {
public void removeItem(RemoveDirection direction, int position);
}

}

閱讀全文

與android拖拽相關的資料

熱點內容
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376
cnc編程有前途嗎 瀏覽:586
聯想app怎麼聯網 瀏覽:722
linuxftp命令登錄 瀏覽:1000
android獲取圖片縮略圖 瀏覽:646
神戶制鋼螺桿壓縮機 瀏覽:29
差分演化演算法 瀏覽:567
中山市加密軟體 瀏覽:446
mc反編譯源碼 瀏覽:139
企業商城網站源碼 瀏覽:411
shell腳本編程是什麼 瀏覽:762
單片機led閃爍匯編 瀏覽:203
點淘app怎麼沒金蛋了 瀏覽:878
app拉新哪裡找推廣碼 瀏覽:935
哪個app生活服務好 瀏覽:108
mht安卓用什麼軟體打開 瀏覽:320
html5即時通訊源碼 瀏覽:144
python編程基礎豆瓣 瀏覽:710
程序員亂碼是什麼意思 瀏覽:373