Android HorizontalScrollView内子控件横向拖拽实例代码_Android

前言

        网上ListView上下拖动的例子有,效果也很好,但是项目要横着拖的,只要硬着头皮自己写(主要是没找到合适的),参考文章1修改而来,分享一下。

正文

截图

实现代码:

public class HoDragActivity extends Activity {

 private LinearLayout main;

 private GestureDetector mGestureDetector;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main_cc);

  main = (LinearLayout) findViewById(R.id.main);

  bindDrapListener(R.id.myimage1);
  bindDrapListener(R.id.myimage2);
  bindDrapListener(R.id.myimage3);
  bindDrapListener(R.id.myimage4);
  bindDrapListener(R.id.myimage5);
  bindDrapListener(R.id.myimage6);
  bindDrapListener(R.id.myimage7);
  bindDrapListener(R.id.myimage8);
  bindDrapListener(R.id.myimage9);
  bindDrapListener(R.id.myimage10);
  bindDrapListener(R.id.myimage11);
  bindDrapListener(R.id.myimage12);

  mGestureDetector = new GestureDetector(this, new DrapGestureListener());
 }

 private View mDrapView;

 private void bindDrapListener(int id) {
  View v = findViewById(id);
  v.setOnTouchListener(mOnTouchListener);
  v.setOnDragListener(mOnDragListener);
 }

 private OnTouchListener mOnTouchListener = new OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
   mDrapView = v;

   if (mGestureDetector.onTouchEvent(event))
    return true;

   switch (event.getAction() & MotionEvent.ACTION_MASK) {
   case MotionEvent.ACTION_UP:

    break;
   }

   return false;
  }
 };

 private OnDragListener mOnDragListener = new OnDragListener() {

  @Override
  public boolean onDrag(View v, DragEvent event) {
   switch (event.getAction()) {
   case DragEvent.ACTION_DRAG_STARTED:
    // Do nothing
    break;
   case DragEvent.ACTION_DRAG_ENTERED:
    v.setAlpha(0.5F);
    break;
   case DragEvent.ACTION_DRAG_EXITED:
    v.setAlpha(1F);
    break;
   case DragEvent.ACTION_DROP:
    View view = (View) event.getLocalState();
    for (int i = 0, j = main.getChildCount(); i < j; i++) {
     if (main.getChildAt(i) == v) {
      // 当前位置
      main.removeView(view);
      main.addView(view, i);
      break;
     }
    }
    break;
   case DragEvent.ACTION_DRAG_ENDED:
    v.setAlpha(1F);
   default:
    break;
   }
   return true;
  }
 };

 private class DrapGestureListener extends SimpleOnGestureListener {
  @Override
  public boolean onSingleTapConfirmed(MotionEvent e) {
   return super.onSingleTapConfirmed(e);
  }

  @Override
  public void onLongPress(MotionEvent e) {
   super.onLongPress(e);
   ClipData data = ClipData.newPlainText("", "");
   MyDragShadowBuilder shadowBuilder = new MyDragShadowBuilder(
     mDrapView);
   mDrapView.startDrag(data, shadowBuilder, mDrapView, 0);
  }

  @Override
  public boolean onDown(MotionEvent e) {
   return true;
  }
 }

 private class MyDragShadowBuilder extends View.DragShadowBuilder {

  private final WeakReference<View> mView;

  public MyDragShadowBuilder(View view) {
   super(view);
   mView = new WeakReference<View>(view);
  }

  @Override
  public void onDrawShadow(Canvas canvas) {
   canvas.scale(1.5F, 1.5F);
   super.onDrawShadow(canvas);
  }

  @Override
  public void onProvideShadowMetrics(Point shadowSize,
    Point shadowTouchPoint) {
   // super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);

   final View view = mView.get();
   if (view != null) {
    shadowSize.set((int) (view.getWidth() * 1.5F),
      (int) (view.getHeight() * 1.5F));
    shadowTouchPoint.set(shadowSize.x / 2, shadowSize.y / 2);
   } else {
    // Log.e(View.VIEW_LOG_TAG,
    // "Asked for drag thumb metrics but no view");
   }
  }
 }
}

代码说明

   1、 MyDragShadowBuilder主要用于缩放拖拽的ImageView,这里放大了1.5倍,而又不至于影响原控件,这里是放大两倍

   2、这里是通过长按来唤起拖拽操作,所以监听了onLongPress。

   3、注意拖拽onDragListener是Android 3.0才新增的API。

 以上就是Android HorizontalScrollView内子控件横向拖拽实例,欢迎交流,有需要参考下。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, horizontalscrollview
, 实现代码
子控件横向拖拽
horizontalscrollview、horizontal scroll、horizontalscrollbar、scrollview不响应拖拽、scrollview 拖拽,以便于您获取更多的相关知识。

时间: 2024-11-17 05:07:04

Android HorizontalScrollView内子控件横向拖拽实例代码_Android的相关文章

Android中实现HorizontalScrollView内子控件横向拖拽

前言 网上ListView上下拖动的例子有,效果也很好,但是项目要横着拖的,只要硬着头皮自己写(主要是没找到合适的),参考文章1修改而来,分享一下. 截图 代码 java public class HoDragActivity extends Activity { private LinearLayout main; private GestureDetector mGestureDetector; @Override public void onCreate(Bundle savedInsta

【Android】HorizontalScrollView内子控件横向拖拽

前言 网上ListView上下拖动的例子有,效果也很好,但是项目要横着拖的,只要硬着头皮自己写(主要是没找到合适的),参考文章1修改而来,分享一下. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 截图       代码 java public class HoDragActivity extends Activity {     private LinearLayout m

asp.net 后台访问listview内子控件

问题描述 asp.net 后台访问listview内子控件 设置一个button按钮,点击时读取listview里一个label控件的文本,使用了findcontrol方法且出错,显示未引用实例,请问该怎么办? 解决方案 listview里面的,先得到rows,再得到cell

完美的js div拖拽实例代码_javascript技巧

本文实例为大家分享了完美的js div拖拽实例代码,供大家参考,具体内容如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head

JavaScript 拖拽实例代码_javascript技巧

一.JS 拖拽的实现实例代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>拖拽js</title> <style type="text/css"> html, body { overflow:hidden; } body, div, { margin:0; pad

Android编程实现改变控件背景及形态的方法_Android

本文实例讲述了Android编程实现改变控件背景及形态的方法.分享给大家供大家参考,具体如下: 1. 改变背景 在res/drawable下创建一个xml文件: <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> // 控件被按下时候的背景 <item

Android自定义加载控件实现数据加载动画_Android

本文实例为大家分享了Android自定义加载控件,第一次小人跑动的加载效果眼前一亮,相比传统的PrograssBar高大上不止一点,于是走起,自定义了控件LoadingView去实现动态效果,可直接在xml中使用,具体实现如下 package com.*****.*****.widget; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.util.

Android自带倒计时控件Chronometer使用方法详解_Android

公司的以前的项目,看到使用了这个Android自带的倒计时控件Chronometer,现在整合了一下 先看看效果: <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_content" android:layout_height="30dp" /> <Button android:onClick="start" andro

android ListView内数据的动态添加与删除实例代码_Android

main.xml 文件:  复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="fill_parent"       android:layout_height