Android 拖拉控件遇到的问题

时间:2023-01-22 10:51:15

第一次写博客,写得不好不要见怪,今天主要说说 拖拉控件,希望和大家交流下。Android 拖拉控件遇到的问题

废话不多说,进入正题。Android 提供了拖拉控件的接口,主要是  View.DragShadowBuilder类 和View.OnDragListener接口 。DragShadowBuilder类主要是关于阴影部分的描叙,而OnDragListener 接口可以监听拖动状态的。

一般的控件例如TextView,button,或者image里面都内置一个方法叫做startDragClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int flags)方法,第一个,第三个,第四个参数,我不清楚,假如有知道的朋友可以留言告知我下,小弟再次感谢Android 拖拉控件遇到的问题; 第二个参数是DragShadowBuilder对象。

代码:MyShadow shadow=new MyShadow(v);
  v.startDrag(null, shadow, null,0);
  img2.setVisibility(View.INVISIBLE);

MyShadow 是我重写DragShadowBuilder之后的类,当然直接用DragShadowBuilder也是可以的,不过重写的可以设置阴影部分的大小,以及显示出来的图片。重写DragShadowBuilder主要写俩个方法onProvideShadowMetrics和onDrawShadow 这俩个方法在这就不解释了。还要提醒一点在DragShadowBuilder类中可以通过getview()方法获取拖动的那个控件。

重写的MyShadow :

@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
// 视图的宽度
int width = getView().getWidth();
// 视图的高度
int height = getView().getHeight();
shadowidth = (int) (width * 2);
shadowheight = (int) (height * 2);
shadowSize.set(shadowidth, shadowheight);
shadowTouchPoint.set(45, 45);
}


@Override
public void onDrawShadow(Canvas canvas) {
ImageView img = (ImageView) getView();
Drawable drawable = img.getDrawable();
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
newbitmap = b.createScaledBitmap(b, 108, 108, true);
canvas.drawBitmap(newbitmap, 0, 0, new Paint());
}

onProvideShadowMetrics方法中,可以获取阴影部分的宽高。shadowTouchPoint.set(45, 45)这个方法可以调整阴影部分的最开始显示的位置。例如图片在你手指左上。或者右下方,具体大家可以试试看。

  接着我们来看下MainActivity类,这个类要实现OnDragListener接口,这里我需要提醒下,我最开始做的时候使用 imageview.setOndragListener(this),结果发现如论如何不会触发这个方法,最后发现setOndragListener(this)前面的应该是拖动控件的布局,例如FrameLayout这样的布局,而不该是拖动的那个组件,其次是这个接口需要重写的那个方法最后返回值 true,具体为什么我也不知道 ,书上这样的写的,具体我也没试过。

还有一个地方需要说明,这是我在学习这节遇到的问题。就是Bitmap.createBitmap(width, height, config)这个方法不懂config参数的哥们可以查找下,具体我也是通过百度知道的,这里我不再啰嗦了。我主要想说这个方法:可以把Bitmap扩大,通过width,和height传入的参数可以改变。但是得到的这个 Bitmap 无法"显示"出来,
我做过一个实验,就是拿Bitmap.createBitmap(width, height, config)这个方法得到的bitmap,通过imageview加载结果显示不出来,这点也是我不明白的地方。

总结下,需要注意的地方:
1.setOndragListener(this)前面的应该是拖动控件的布局。
2.Bitmap.createBitmap(width, height, config)这个方法得到的bitmap,无法正常显示。
3.OnDragListener接口需要重写的那个方法最后返回值 true
项目的下载链接:http://pan.baidu.com/s/1gdtwQaR
项目其实有一个漏洞,就是当把imageview拖动在最最最右边的时候,图片会缩小,我想的话是因为padding值与右边界之间的距离太小,因此绘制imageview 父类就会出来干预,因此会很小。当然可以在代码中假如判断,具体代码我就不写了,相信大家能自己搞明白