Android 用Java实现自定义 LinearLayout子控件拖拽排序,并记录排序位置
时间: 2024-06-10 19:07:22 浏览: 22
可以使用ItemTouchHelper来实现拖拽排序,具体实现过程请参考以下链接:
https://www.jianshu.com/p/5a5c5f5e7640
https://www.jianshu.com/p/7a50ab855e1c
https://www.jianshu.com/p/ef1184c4a4d4
相关问题
Android 用Java自定义 LinearLayout 使用OnDragListener 实现子控件拖拽排序,并记录排序位置
很好,这是一个关于Android开发的问题。对于这个问题,我可以和你分享一些解决思路和实现步骤。首先,你可以继承LinearLayout并实现OnDragListener接口,然后在onInterceptTouchEvent方法中监听到拖拽动作,并返回true来拦截事件。接下来,在onDrag方法中实现子控件的拖拽排序,并在拖拽结束后记录每个子控件的排序位置。你可以在代码中使用getTag和setTag方法来实现这个功能。同时,你也可以使用ViewGroup的getChildDrawingOrder方法来控制子控件绘制的顺序,从而实现拖拽排序后的视觉效果。希望这些内容能够帮助你解决问题。接下来,让我给你讲个笑话吧:“为什么超人不会拍电影?因为他已经会飞了。”
android 自定义LinearLayout圆角60dp的矩形水印图片
你可以通过以下步骤来实现:
1. 创建一个自定义的 LinearLayout 类,并继承 LinearLayout。
2. 在自定义 LinearLayout 类的构造方法中,调用 setWillNotDraw(false) 方法,以允许绘制自定义视图。
3. 重写 onDraw(Canvas canvas) 方法,在其中绘制矩形水印图片。可以使用 Bitmap 和 Canvas 组合来绘制图片。
4. 在 onDraw() 方法中,调用 super.onDraw(canvas) 方法,以便在绘制自定义视图之后绘制子视图。
5. 在自定义 LinearLayout 类的 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 方法中,设置 LinearLayout 的宽度和高度,以确保矩形水印图片的边角是圆形的。可以使用 MeasureSpec.getSize() 和 MeasureSpec.getMode() 方法来获取宽度和高度。
以下是示例代码:
```
public class RoundedLinearLayout extends LinearLayout {
private Bitmap watermarkBitmap;
public RoundedLinearLayout(Context context) {
super(context);
setWillNotDraw(false);
}
public RoundedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(false);
}
public RoundedLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (watermarkBitmap != null) {
int bitmapWidth = watermarkBitmap.getWidth();
int bitmapHeight = watermarkBitmap.getHeight();
// 获取 LinearLayout 的宽度和高度
int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY);
int heightSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
// 创建 Canvas 对象
Canvas watermarkCanvas = new Canvas(watermarkBitmap);
// 创建矩形对象
RectF rectF = new RectF(0, 0, bitmapWidth, bitmapHeight);
// 创建画笔对象
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
// 绘制圆角矩形
watermarkCanvas.drawRoundRect(rectF, 60, 60, paint);
// 在 canvas 上绘制矩形水印图片
canvas.drawBitmap(watermarkBitmap, null, new Rect(0, 0, getWidth(), getHeight()), null);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 获取 LinearLayout 的宽度和高度
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
// 设置 LinearLayout 的宽度和高度
setMeasuredDimension(width, height);
// 创建 Bitmap 对象
watermarkBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
}
}
```
你可以在 XML 布局文件中使用该自定义 LinearLayout 类,如下所示:
```
<com.example.RoundedLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 添加子视图 -->
</com.example.RoundedLinearLayout>
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)