上下拖动片段

Posted

技术标签:

【中文标题】上下拖动片段【英文标题】:Drag fragment up and down 【发布时间】:2021-12-06 21:20:08 【问题描述】:

我的主要活动由两个片段组成,一个叫做画布,另一个是调色板。在主要活动中,调色板仅出现在屏幕的 25% 上,我想让它成为可能,以便用户可以上下拖动以从中选择颜色。我不知道该怎么做。

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:weightSum="2">

    <FrameLayout
        android:id="@+id/canvasFragment"
        android:name="com.example.FragmentOne"
        android:layout_
        android:layout_
        android:layout_weight="1.5" />

    <FrameLayout
        android:id="@+id/paletteFragment"
        android:name="com.example.FragmentTwo"
        android:layout_
        android:layout_
        android:layout_weight="0.5" />

</LinearLayout>

mainActivity.java:

package com.example.paint;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        /**Canvas**/
        // Create new fragment and transaction
        Fragment canvasFragment = new CanvasFragment();
        //canvasFragment.getView().setBackgroundColor(this.cor);
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.canvasFragment, canvasFragment);
        transaction.addToBackStack(null);
        // Commit the transaction
        transaction.commit();

        /**Palette**/
        // Create new fragment and transaction
        Fragment paletteFragment = new PaletteFragment();
        FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction2.replace(R.id.paletteFragment, paletteFragment);
        transaction2.addToBackStack(null);
        // Commit the transaction
        transaction2.commit();

        setContentView(R.layout.activity_main);
    



PaletteFragment.java:

package com.example.paint;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

public class PaletteFragment extends BottomSheetDialogFragment 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
// Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_palette, container, false);
    


感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

您可以使用 BottomSheetDialogFragment 来获得所需的结果。这是 Android 材质库中的一个对话框片段。

您必须使用 BottomSheetDialogFragment 扩展您的 Palette 片段,并简单地使用以下几行在 Activity 中显示它:

PaletteFragment paletteFragment = new PaletteFragment();
paletteFragment.show(getSupportFragmentManager(), "TAGTEXT");

在您的 PaletteFragment 中,使用 BottomSheetBehavior.BottomSheetCallback() 为要滑动的调色板添加侦听器。在此回调中,您可以更新幻灯片上的调色板高度。

【讨论】:

我替换了我在 PaletteFragment paletteFragment = new PaletteFragment(); paletteFragment.show(getSupportFragmentManager(), "TAGTEXT"); 的主中添加paletteFragment 的部分,并用bottomSheetDialogFragment 扩展了调色板。现在对于听众,我像onDrag()... BottomSheetBehavior.BottomSheetCallback 那样做,我是在主类还是在片段类中做这部分? 在 Fragment 类中添加 BottomSheetCallback 我是做一个新方法还是在 onCreate() 中做? 我严重不理解这部分 我应该在我的 mainActivity.java 中替换我有 PaletteFragment paletteFragment = new PaletteFragment(); FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction(); transaction2.replace(R.id.paletteFragment, paletteFragment); transaction2.addToBackStack(null); transaction2.commit(); 的部分 PaletteFragment paletteFragment = new PaletteFragment(); paletteFragment.show(getSupportFragmentManager(), "TAGTEXT");

以上是关于上下拖动片段的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX窗口拖动

Final Cut Pro X中的音视频片段如何自由拖动?

在WORD里拖动鼠标滑轮,页面不上上下走,而是放大缩小,怎么回事?

禁止微信内的H5页面上下拖动

vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)

WPF之拖动项滚动条自滚动(当拖动项到达高度的边界时候滚动条自己可以上下滚动)