FrameLayout(프레임 레이아웃)


이 섹션 소개

FrameLayout(프레임 레이아웃)은 6가지 레이아웃 중 가장 간단한 레이아웃이라고 할 수 있습니다. 이 레이아웃은 컨트롤을 추가하면 화면에 빈 영역이 바로 열립니다. 기본적으로 이 영역의 왼쪽 상단에 배치되지만 이 레이아웃 방법에는 위치 지정 방법이 없으므로 많은 시나리오에서 사용되지 않습니다. 프레임 레이아웃의 크기는 컨트롤의 크기가 같은 경우에는 동시에 상단 구성 요소만 볼 수 있습니다! 이후에 추가된 컨트롤은 이전 컨트롤을 덮어쓰게 됩니다. 기본적으로 컨트롤은 왼쪽 상단에 배치됩니다. 가장 간단한 예를 보여주는 것 외에도 이 섹션에서는 두 가지 흥미로운 예를 제공합니다.

1. FrameLayout에는 두 가지 속성만 있는 경우가 거의 없지만, 소개하기 전에:

전경 이미지: 항상 프레임 레이아웃의 상단에 위치하며 사용자를 직접 바라보는 이미지입니다.

두 가지 속성:

  • android:foreground:*

    프레임 레이아웃 컨테이너의 전경 이미지 설정

  • android:foregroundGravity:

    전경 이미지가 표시되는 위치 설정

  • 2. 예시 데모

1) 가장 간단한 예시

렌더링 실행:

1.png구현 코드는 다음과 같습니다.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id=" @+id/framelayout1 "
Android : layout_width ="match_parent "
Android : layout_height ="match_parent "
도구 : context =". mainActivity "


android : 포그 턴스 ="@drawable/logo "

android : foregroundgravity ="Right | 하단">    ㅋㅋㅋ html" />    ㅋㅋㅋ    ㅋㅋㅋ    
        
</FrameLayout>

코드 분석:세 개의 TextView는 서로 다른 크기와 배경색으로 설정되어 있으며 순서대로 덮여 있습니다. 그런 다음 오른쪽 하단에 있는 것이 전경 이미지입니다. android:foreground="@drawable/logo"는 전경 이미지의 그림을 설정하고, android:foregroundGravity="right|bottom" 전경 이미지의 위치를 ​​오른쪽 하단에 설정합니다

2) 손가락으로 움직이는 귀여운 소녀

렌더링은 다음과 같습니다

2.gif

구현 과정 분석 :

  • 1단계: 먼저 main.xml 레이아웃을 빈 FrameLayout으로 설정하고 그림 배경을 설정합니다.

  • 2단계: View 클래스를 상속하는 새로운 MeziView 사용자 정의 컴포넌트 클래스를 생성하고 생성 메서드에서 뷰의 초기 좌표

  • 3단계: onDraw() 메서드를 재정의하고 빈 브러시 클래스 Paint를 인스턴스화합니다

  • 4단계: BitmapFactory.decodeResource()를 호출하여 비트맵 객체 생성

  • 5단계: canvas.drawBitmap()을 호출하여 소녀의 비트맵 개체 그리기

  • 6단계: 이미지가 재활용되는지 여부를 결정합니다. 그렇지 않으면 이미지가 강제로 재활용됩니다.

  • 7단계: 프레임 레이아웃 개체 가져오기 메인 Java 코드에서 MeziView 클래스를 인스턴스화합니다

  • 8단계: 인스턴스화된 mezi 객체에 터치 이벤트 리스너를 추가하고 onTouch 메서드를 재정의하고 mezi의 X, Y 좌표를 변경하고 무효화()를 호출합니다. 다시 그리기 방법

  • 9단계: 프레임 레이아웃에 mezi 개체 추가

레이아웃 코드: main_activity.xml

<FrameLayout xmlns:android="http://schemas.android.com/ apk/res/android"
xmlns:tools="http://schemas.android.com/tools"                                                                                                                                                             와 함께; ./style /images/back" >
</FrameLayout>

CustomizedMeziView.java

package com.jay.example.framelayoutdemo2;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory; Canvas;
import android.graphics.Paint;
import android.view.View;

public class MeziView extends View {
  //소녀 디스플레이 위치의 X, Y 좌표인 관련 변수 정의
  public float bitmapX;
public float bitmapY;
public MeziView(Context context) {
super(context);
//소녀의 시작 좌표 설정
bitmapX = 0;
bitmap Y = 200;

//View의 그리기 다시 작성 class () Methods@@Override
Protected void ondraw (캔버스 캔버스) {
Super.ondraw (캔버스)
// 페인트의 개체 페인트 = 새 페인트 () i 비트맵 비트맵 = bitmapFactory.DecodeResource ( this.GetResources (), R.Drawable.S_JUMP); mapx, bitmapy, 페인트)
// 그림 재활용 여부 확인 재활용이 없으면 그림
if (bitmap.isrecycled ()) {
bitmap. 재활용 ()
}}}





MainActivity.java:

package com.jay.example.framelayoutdemo2;  
  
import android.os.Bundle;  
android.view.MotionEvent 가져오기;  
android.view.View 가져오기;  
android.view.View.OnTouchListener 가져오기;  
android.widget.FrameLayout 가져오기;  
android.app.Activity 가져오기;  
  
  
public class MainActivity는 활동 확장 {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        FrameLayout 프레임 = (FrameLayout) findViewById(R.id.mylayout);  
        최종 MeziView mezi = 새 MeziView(MainActivity.this);  ㅋㅋㅋ        공개 부울 onTouch(보기 보기, MotionEvent 이벤트) {  
               //设置妹子显示的位置  
               mezi.bitmapX = event.getX() - 150;  
              mezi.bitmapY = event.getY() - 150;  
             //메지 무효화();  
              true를 반환합니다.  
           }  
        })  
        frame.addView(mezi);  
    }  
}

코드 설명: 보기 클래스를 사용자 정의하고 다시 그리기 방법을 재정의한 다음 터치 시간에 onTouch 방법을 재정의하는 것은 매우 간단합니다. 또한 클릭 포커스는 -150이 필요합니다. 그렇지 않은 경우 해당 좌표는 사용자 정의 보기의 왼쪽 위 모서리입니다. 그런 다음 무효화() 다시 그리기 메서드를 호출하고 마지막으로 프레임 레이아웃에 추가합니다.

FRAMELAYOUTDEMO2.ZIP3) 귀여운 소녀 렌더링 렌더링은 다음과 같습니다. 전경 이미지를 중앙 위치로

2단계: Activity에서 FrameLayout 레이아웃을 얻고, 새 Handler 객체를 생성하고, handlerMessage() 메서드를 재정의하고, 이미지를 호출합니다. - 업데이트된 메서드

3단계: 사용자 정의 move() 메소드를 사용하고 Displayed bitmap

3.gif 스위치를 통해 전경 이미지를 동적으로 설정합니다. 4단계: onCreate() 메소드에서 새 타이머 객체 Timer를 생성하고, run 메소드를 다시 작성하고, 170밀리초마다 빈 정보를 핸들러에 보냅니다.

구현 코드는 다음과 같습니다.
  • 레이아웃 파일: main_activity.xml:
  • <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android "
  • xmlns:tools="http://schemas.android.com/tools"
  • android:id="@+id/myframe"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"
  • 안드로이드: foregroundGravity="center">
  • </ FrameLayout>

    MainActivity.java:


    package com.jay.example.framelayoutdemo3;
    import java.util.TimerTask;
    import android.os.Handler; 메시지;
    import android.view.View.OnClickListener;
    import android.widget.FrameLayout;
    public class MainActivity는 Activity {
    초기화, 프레임 레이아웃
    //UI 인터페이스를 정기적으로 업데이트하기 위한 핸들러 클래스 객체 사용자 정의
    Handler handler = new Handler() { ; V @Override
    Public Void HandleMessage (Message MSG) {
    // 정보가
    if (msg.what == 0x123) {
    ++(i%8)
    }}
    super.handleMessage(msg)
    }
            };          
               
        //정답법    
        void move(int i)    
        {    
            Drawable a = getResources().getDrawable(R .drawable.s_1);    
            드로어블 b = getResources().getDrawable(R.drawable.s_2);    
            드로어블 c = getResources().getDrawable(R.drawable.s_3);    
            드로어블 d = getResources().getDrawable(R.drawable.s_4);    
            드로어블 e = getResources().getDrawable(R.drawable.s_5);    
            드로어블 f = getResources().getDrawable(R.drawable.s_6);    
            드로어블 g = getResources().getDrawable(R.drawable.s_7);    
            드로어블 h = getResources().getDrawable(R.drawable.s_8);    ㅋㅋㅋ  frame.setForeground(a);    
                    휴식;    
                사례 1:    
                    frame.setForeground(b);    
                    휴식;    
                사례 2:    
                    frame.setForeground(c);    
                    부서지다;    
                사례 3:    
                    frame.setForeground(d);    
                    휴식;    
                사례 4:    
                    frame.setForeground(e);    
                    휴식;    
                케이스 5:    
                    frame.setForeground(f);    
                    휴식;    
                케이스 6:    
                    frame.setForeground(g);    
                    휴식;    
                케이스 7:    
                    frame.setForeground(h);    
                    휴식;    ㅋㅋㅋ    
            setContentView(R.layout.activity_main);    
               
            프레임 = (FrameLayout) findViewById(R.id.myframe);    
    //타이머 객체를 정의하고 핸들러에 정기적으로 정보를 보냅니다.   
                   handler.sendEmptyMessage(0x123);                                                                



    코드 분석:
    코드도 매우 간단합니다. 새로 고칠 핸들러 개체를 정의하는 것입니다. 프레임 레이아웃의 전경 이미지 정의 타이머 타이머는 170밀리초마다 타이밍 정보를 전송합니다. i++;move(i%8);


    코드 다운로드:
    FrameLayoutDemo3.zip
    이 섹션 요약


    이 섹션에서는 주로 foreground 및 foregroundGravity 속성의 사용을 마스터하는 FrameLayout(프레임 레이아웃)을 소개합니다! 프레임 레이아웃은 이전 테이블 레이아웃보다 조금 더 많이 사용됩니다! 관심이 있으신 분들은 작가님처럼 소소한 예시를 작성해 보시는 것도 좋을 것 같아요!