您的位置:首页 > 移动开发 > Android开发

Android 拖拉控件遇到的问题

2015-11-18 21:21 501 查看
第一次写博客,写得不好不要见怪,今天主要说说 拖拉控件,希望和大家交流下。


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

一般的控件例如TextView,button,或者image里面都内置一个方法叫做startDrag(ClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int
flags)
方法,第一个,第三个,第四个参数,我不清楚,假如有知道的朋友可以留言告知我下,小弟再次感谢

; 第二个参数是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接口需要重写的那个方法[b]最后返回值
true


项目的下载链接:http://pan.baidu.com/s/1gdtwQaR

项目其实有一个漏洞,就是当把imageview拖动在最最最右边的时候,图片会缩小,我想的话是因为padding值与右边界之间的距离太小,因此绘制imageview 父类就会出来干预,因此会很小。当然可以在代码中假如判断,具体代码我就不写了,相信大家能自己搞明白

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: