안드로이드

 

 

 

 

 

 

Surface  는 하드웨어 가속기능을 사용할 수 있도록  만들었다.

 

모든 뷰에 하드웨어 가속기를 사용하고 싶다면 mainfest 에서

 

 android:hardwareAccelerated="true" 로설정하면된다.

 

method 중에는 hardwareAccelerated 안되는 경우가 있다.

 

Surface  => 기본적으로 버블 퍼퍼링 을 해야 한다.

 

서피스는 -> 사진찍기할때 미리보기로 사용된다.

 

사진찍기로 미리보기는 실시간으로 빠르게 보여주기 위해 

하드웨어 가속기술 필요하다. 일반 뷰는 3D 등에 사용 못하기 때문에

서피스를 사용한다. 

"현재는 버전이 올라가서 뷰에서는 하드웨어 가속기술이 가능하다 "

= > 이것은 확인 해 봐야 한다.

 

Surface   메모리에 만들어지거나 상태가 바뀌거나 

삭제되는것을 직접 관리할 수 있다.
 

 

 

class MainActivity

 

package org.androidtown.mysurface;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    MySurfaceView mySurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mySurfaceView=(MySurfaceView)findViewById(R.id.view1);
    }

    public void onButton1Clicked(View v){

        mySurfaceView.doDraw();

    }

}

 

 

R.layout.activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="org.androidtown.mysurface.MainActivity">

    <Button
        android:text="그리기"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:onClick="onButton1Clicked"
        />



    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/button">

        <org.androidtown.mysurface.MySurfaceView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorAccent"
            android:id="@+id/view1"
            />


    </LinearLayout>



</RelativeLayout>

 

 

class MySurfaceView

package org.androidtown.mysurface;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

/**
 * Created by choi on 2017-04-11.
 */

public class MySurfaceView extends SurfaceView implements  SurfaceHolder.Callback{

    Context mContext;
    SurfaceHolder holder;
    Paint paint;

    public MySurfaceView(Context context) {
        super(context);
        init(context);
    }

    public MySurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context){
        mContext=context;
        this.holder=getHolder();
        this.holder.addCallback(this);

        paint =new Paint();
        paint.setColor(Color.WHITE);
        paint.setStrokeMiter(10.0f);
    }



/*    public void draw(){
        //홀더 에서 캔버스객체를 가져온다.
        Canvas  canvas =holder.lockCanvas();
        //사각형을 그린다.
        canvas.drawRect(100, 100, 200, 200, paint);
        // 캔버스를 다 그리면 unlock 을 하면서 캔버스에 그려준다.
        //아직 화면에 그려진 상태는 아니다.
        holder.unlockCanvasAndPost(canvas);

        //다시 그리기 호출
        invalidate();
    }*/


    public void doDraw(){

        // invalidate 호출시  onDraw 호출
        invalidate();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawRect(100, 100, 200, 200, paint);
        Toast.makeText(mContext, "onDraw가 호출되었습니다.", Toast.LENGTH_SHORT).show();
    }



    //서피스에서 메모리를 생성
    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }

    //서피스에서 메모리가 변경 되었을 때 제어
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }


    //서피스에서 메모리에서 삭제 될때 제어
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}

 

 

androidManifest.xml

   android:hardwareAccelerated="true">

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.androidtown.mysurface">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
                android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

 

 

75강

 

 

 

 

76강

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

눈으로 돌을 보면 희다는 것은 알 수가 있다. 그러나 굳고 단단하다는 것은 알 수가 없다. 손으로 돌을 만져보면 비로소 굳고 단단하다는 것을 알 수가 있다. 그러나 희다는 것은 알 수가 없다. 따라서 굳고 흰 돌(堅白石)은 동시에 성립될 수 없는 개념이다. 전국시대에 조(趙) 나라 공손룡(公孫龍) 등의 논(論). -순자

댓글 ( 4)

댓글 남기기

작성