안드로이드 픽셀 변환에 대한 연구(一)
드로잉의 기본 요소입니다.우리가 말하는 화면 해상도는 픽셀을 가리킨다.만약 휴대전화의 해상도가 480*800이라면 휴대전화의 폭은 480개의 화소이고 길이는 800개의 화소이다.이 화소는 고정되어 있다.선을 0, 0에서 240400 픽셀 단위로 그리면 왼쪽 상단에서 화면 중간까지의 선이 됩니다.
2.dpi(Dots Per Inch): 픽셀 밀도
라는 약자를 썼다.인치당 인쇄되는 점 또는 선 수입니다.
DPI는 원래 인치당 인쇄할 수 있는 점포수(Dot Per Inch)를 뜻하는 인쇄상의 기량 단위였다.그러나 디지털 입력으로 출력 장비가 빠르게 발전하면서 대다수 사람도 디지털 영상의 해상도를 DPI로 표시하지만, 비교적 엄격한 사람들은 인쇄할 때 계산하는 점포(Dot)와 컴퓨터 모니터의 디스플레이 픽셀(Pixel)이 같지 않다는 것을 알아차릴 수 있기 때문에 전문적인 사람들은 PPI(Pixel Per Inch)로 디지털 영상의 해상도를 표시해 양자를 구분한다.
고정된 사이즈마다 몇 개의 픽셀이 있는지 간단하게 이해할 수 있다.예를 들어 같은 픽셀이 작은 사이즈에 표시될수록 픽셀 밀도가 높다.밀도가 높은 효과는 바로 화면이 섬세하다는 것이다.같은 사선은 밀도가 높은 설비에 나타나면 톱니가 잘 생기지 않는다.밀도가 낮은 장치에 표시하면 톱날이 쉽게 나타난다.
우리는 아래의 두 폭의 그림을 보았다.
pix-001
pix-002
같은 그림 크기에 첫 번째 그림은 픽셀 밀도(50*50 픽셀), 두 번째 그림은 픽셀 밀도(5*5 픽셀)가 작아 전혀 다르게 보이지 않나요?
Android에서 가상 시스템을 만들 때 데스티티라는 매개 변수가 있습니다.이것은 dpi와 같은 개념일 것이다.
3. dip(device independent pixels): 장치 독립 픽셀.
추상적인 의미의 픽셀을 가리키며 프로그램은 그것을 이용하여 인터페이스 요소를 정의한다.이것은 실제 밀도와 무관한 단위로서 프로그래머가 레이아웃 방안(인터페이스 요소의 너비, 높이, 위치)을 구축하는 데 도움을 준다.
dip은android에서 추상적으로 나온 개념이다.그의 주요 목적은 무엇입니까?구글은 왜 dip으로 화면을 배치하는 것을 추천합니까?
동일한 dip 디스플레이 효과 실험
우리는 dip가 표시하는 단추로 효과를 보았다.
대비하기 편리하도록 버튼 아래에 사용자 정의 View를 설치합니다.
layout의 xml 파일:
- view plain
- xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <com.study.about.dip.ViewForShow
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/btn"
- android:layout_width="240dip"
- android:layout_height="320dip"
- android:text="Button"
- />
- FrameLayout>
사용자 정의 View 코드:
- view plain
- package com.study.about.dip;
-
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.AttributeSet;
- import android.util.Log;
- import android.util.TypedValue;
- import android.view.View;
-
- public class ViewForShow extends View {
- private Paint mPaint = new Paint();
-
- public ViewForShow(Context context) {
- super(context);
- }
-
- public ViewForShow(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public ViewForShow(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- public void draw(Canvas canvas) {
- mPaint.setColor(Color.RED);
- canvas.drawLine(0, 0, 120, 160, mPaint);
- mPaint.setColor(Color.GREEN);
- canvas.drawLine(0, 320, 120, 160, mPaint);
- mPaint.setColor(Color.YELLOW);
- canvas.drawLine(240, 0, 120, 160, mPaint);
- mPaint.setColor(Color.BLUE);
- canvas.drawLine(240, 320, 120, 160, mPaint);
- }
- }
코드의 기능은 네 개의 직선을 그려 절대 픽셀로 표시하여 대비하는 것이다.그런 다음 240 * 320dpi 버튼을 선 위에 놓습니다.dpi와 픽셀의 관계를 봅시다.우리는 서로 다른 가상 기기를 시작해서 디스플레이 효과를 비교한다.
대비1: 화면의 길이와 너비의 비례가 같고 해상도가 다른 상황을 먼저 비교한다.
가상 머신 1:
pix-003
다음과 같이 표시됩니다.
pix-004
가상 시스템 2:
pix-005
다음과 같이 표시됩니다.
pix-006
우리는 두 모니터의 버튼이 같은 비율로 화면에 표시되는 것을 알 수 있다.네 개의 색깔의 직선은 절대 픽셀에 따라 그리고, 단추는dip에 따라 그린다.density=120일 때 240dip=180px;density=160일 때 240dip=240px.
기본적으로 우리는 하나의 결론을 얻어낼 수 있다.
같은 dip, 서로 다른 해상도 화면에서 화면의 상대적인 폭은 같다.상대적 너비란 컨트롤이 화면을 차지하는 비율로 이해할 수 있다.
density = 160에서 1dip = 1px
우리는 이런 공식을 얻을 수 있다.
desity :160 = px : dip
하지만 공식은 연산용으로만 쓰인다.진정한 의도는 dip 픽셀로 화면 컨트롤을 설정하면 화면 크기가 바뀌어도 컨트롤의 상대적인 크기는 변하지 않는다는 것이다.이것이 바로 구글이 생각하는'설비와 무관하다'는 의미다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
양식 제출 후 제출 버튼 비활성화텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.