2016-09-20 35 views
0

我想要一个视图应该是浮动在应用程序的活动,而不是其他应用程序。如何绘制一个视图,该视图应该在同一应用中的所有活动上浮动?

我在活动c.Activity中使用图像视图c在两个活动a,b之上。我有一个按钮来最小化活动c中的活动。一旦我最小化,imageview应该浮动在活动b上。即使我关闭了活动b,它应该覆盖活动a。如何实现这一目标?

+0

您可以添加图片,以便更快掌握? –

+0

你不能有相同的按钮浮动在不同的活动,但你可以克隆每个活动的按钮,并显示它 –

回答

0

好的,这里是工作流程: 创建另一个活动d。让我们打电话给FloatActivity。

第一:从最显着的角度改变活动的主题。

<activity 
    android:name=".FloatActivity" 
    android:label="Float Button" 
    <!-- Use Translucent theme to get transparent activity background 
    and NoTitleBar to avoid super old style title bar ;) --> 
    android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
</activity> 

第二:现在编辑的FloatActivity

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pop" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent"> 

    <ImageButton 
     android:id="@+id/popButton" 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:background="#000"/> 
</RelativeLayout> 

3日的.xml:现在代码的Java现在

public class FloatActivity extends Activity implements View.OnTouchListener{ 

    private ImageButton floatButton; 

    private int previousFingerPosition = 0; 
    private int baseLayoutPosition = 0; 
    private int defaultViewHeight; 

    private boolean isClosing = false; 
    private boolean isScrollingUp = false; 
    private boolean isScrollingDown = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_popup); 
     floatButton = (ImageButton) findViewById(R.id.popButton); 
     floatButton.setOnTouchListener(this); 
    } 


    public boolean onTouch(View view, MotionEvent event) { 

     // Get finger position on screen 
     final int Y = (int) event.getRawY(); 

     // Switch on motion event type 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 

      case MotionEvent.ACTION_DOWN: 
       // save default base layout height 
       defaultViewHeight = baseLayout.getHeight(); 

       // Init finger and view position 
       previousFingerPosition = Y; 
       baseLayoutPosition = (int) baseLayout.getY(); 
       break; 

      case MotionEvent.ACTION_UP: 
       // If user was doing a scroll up 
       if(isScrollingUp){ 
        // Reset baselayout position 
        baseLayout.setY(0); 
        // We are not in scrolling up mode anymore 
        isScrollingUp = false; 
       } 

       // If user was doing a scroll down 
       if(isScrollingDown){ 
        // Reset baselayout position 
        baseLayout.setY(0); 
        // Reset base layout size 
        baseLayout.getLayoutParams().height = defaultViewHeight; 
        baseLayout.requestLayout(); 
        // We are not in scrolling down mode anymore 
        isScrollingDown = false; 
       } 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if(!isClosing){ 
        int currentYPosition = (int) baseLayout.getY(); 

        // If we scroll up 
        if(previousFingerPosition >Y){ 
         // First time android rise an event for "up" move 
         if(!isScrollingUp){ 
          isScrollingUp = true; 
         } 

        // Has user scroll down before -> view is smaller than it's default size -> resize it instead of change it position 
        if(baseLayout.getHeight()<defaultViewHeight){ 
         baseLayout.getLayoutParams().height = baseLayout.getHeight() - (Y - previousFingerPosition); 
         baseLayout.requestLayout(); 
        } 
        else { 
         // Has user scroll enough to "auto close" popup ? 
         if ((baseLayoutPosition - currentYPosition) > defaultViewHeight/4) { 
          closeUpAndDismissDialog(currentYPosition); 
          return true; 
         } 

         // 
        } 
        baseLayout.setY(baseLayout.getY() + (Y - previousFingerPosition)); 

       } 
       // If we scroll down 
       else{ 

        // First time android rise an event for "down" move 
        if(!isScrollingDown){ 
         isScrollingDown = true; 
        } 

        // Has user scroll enough to "auto close" popup ? 
        if (Math.abs(baseLayoutPosition - currentYPosition) > defaultViewHeight/2) 
        { 
         closeDownAndDismissDialog(currentYPosition); 
         return true; 
        } 

        // Change base layout size and position (must change position because view anchor is top left corner) 
        baseLayout.setY(baseLayout.getY() + (Y - previousFingerPosition)); 
        baseLayout.getLayoutParams().height = baseLayout.getHeight() - (Y - previousFingerPosition); 
        baseLayout.requestLayout(); 
       } 

       // Update position 
       previousFingerPosition = Y; 
      } 
      break; 
     } 
     return true; 
    } 
} 

,最大限度地减少您的活动刚开始活动之前,d(FloatActivity )。

+0

我需要像facebook聊天头部头像。但它应该覆盖在我的应用程序活动中,而不是其他人。 – Ayyappan

相关问题