上下拖动片段
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");
以上是关于上下拖动片段的主要内容,如果未能解决你的问题,请参考以下文章
在WORD里拖动鼠标滑轮,页面不上上下走,而是放大缩小,怎么回事?