'android'에 해당되는 글 9건

  1. 2015.11.19 안드로이드 룰렛 4 작업중
  2. 2015.11.13 룰렛3
  3. 2015.11.11 룰렛 2 1
  4. 2015.10.28 생명주기(작성중)
  5. 2015.10.28 안드로이드 스터디 내용 정리
  6. 2015.10.16 canvas (원)
  7. 2015.10.13 리소스에 대해서 - Color
  8. 2015.10.13 리소스에 대해서 - Value
package com.test.iunote.rotate_v1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends ActionBarActivity {

CircleManager mCircleManager; //원을 그리는 도구
Context context;
//private String[] STRINGS = { "1" ,"2","3","4","5","6","7","8"}; //
// private float values[] = { 1, 1, 10, 20, 68}; // 원의 비율 값이 클수록 커진다.
private String[] STRINGS = { "1" ,"2"};
private float rate[] = {30,70};
private float rate2[] ={30,70};
private float values[] = getArray(rate2);
private String title;
List<Vo> interfaceDate = new ArrayList<>();

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

// 원 유틸리티를 초기화한다.
mCircleManager = new CircleManager(this);
// 레이아웃을 불러온다.
LinearLayout linear = (LinearLayout) findViewById(R.id.rotate_circle);
// 버튼 이벤트를 지정한다.
Button btn = (Button) findViewById(R.id.btn_rotate);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 회전할 각도를 지정한다.
int degree = getResult();
Log.e("nnn", degree + "");
Button btn = (Button) findViewById(R.id.btn_rotate);
btn.setEnabled(false);
mCircleManager.onRotateCircle(3600 + degree); //회전하는각도 값 보냄
// onDraw를 호출한다.
mCircleManager.invalidate();
mCircleManager.getText();
}
});
linear.addView(mCircleManager);
}


//List 갯수만큼 룰렛 1값으로 갯수생성
public float[] getArray(float[] values){
for(int i=0;i<values.length;i++){
values[i] = 1;
}
return values ;
}

public int getResult(){
Log.d("getRserulrt", "1");
// API 값을 가져온다.
//List<Vo> interfaceDate = new ArrayList<>();
for(int i = 0 ; i < STRINGS.length; i++) {
interfaceDate.add(new Vo(STRINGS[i], (int) rate[i]));
Log.d("getValue", interfaceDate.get(i).getValue() + "getTitile" +interfaceDate.get(i).getTitile());

}
return getItemOne(interfaceDate);
}

//난수
public int selectRandom(){
Random rand = new Random();
int n = rand.nextInt(100) + 1;
return n;
}

/**
* 난수값에 해당하는 각도구하기
*/
public int getRotate(int num){
int i=1;
int rotate=0;
for(int n=values.length;n>0;n--){
if(num >= interfaceDate.get(n-1).getMinV() && num <= interfaceDate.get(n-1).getMaxV()){
title = interfaceDate.get(n-1).getTitile();
int a= 360/values.length;
rotate = (a*i)+250;
Log.d("aaaaaaaaa", a+ "");
Log.d("title", title + "");
Log.d("rotate", rotate + "");
break;
}
i++;
}
return rotate;
}

public int getItemOne(List<Vo> list) {
Log.d("getRserulrt", "getItemOne");
String value = "";
// setValue
int b = 0;
int initValue = 0;
//minvalue , maxvalue setting
for(int i = 0; i < list.size(); i++) {
list.get(i).setMinV(initValue);
list.get(i).setMaxV(initValue + list.get(i).getValue());
initValue += list.get(i).getValue();
Log.d("TAG",list.get(i).getTitile()+" min : " + list.get(i).getMinV() + "/ max : " + list.get(i).getMaxV());
}
int number = selectRandom();
//난수값이 (if ) minvalue 보다 같거나 크고 / maxvalue 같거나 작고
Log.e("number",number+"");
int rotate = getRotate(number);
return rotate;

}


public class CircleManager extends View {

private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 페인트
private float[] value_degree;
private int[] COLORS = { Color.YELLOW, Color.GREEN, Color.WHITE, Color.CYAN, Color.RED ,Color.GRAY,Color.MAGENTA,Color.GRAY };
private Button button = (Button)findViewById(R.id.btn_rotate);
private TextView textView = (TextView)findViewById(R.id.result);
int temp = 0;
int rotate = 0;
boolean isRotate = false; //제어변수
private Animation anim;
private Handler handler;
private Runnable runnable;

// 기본 생성자
public CircleManager(Context context) {
super(context);
value_degree = calculateData(values);
}


// 비율을 계산해서 원을 그린다.
private float[] calculateData(float[] data) {
float total = 0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
for (int i = 0; i < data.length; i++) {
data[i] = 360 * (data[i] / total);

}
return data;
}

/**
*
* 회전에 대한 옵션을 지정한다.
* @param degree 각도
*/
private void onRotateCircle(int degree) {
// 각도를 지정한다.
this.rotate = degree;
Toast.makeText(getContext(), "회전을 시킨다.", Toast.LENGTH_SHORT).show();
// 회전을 제어한다.
this.isRotate = true;
}

/**
*
* 에니메이션을 만든다.
*
*/
private void createAnimation() {
// anim = new RotateAnimation(0, rotate, getWidth()/2, getHeight()/2);
Log.e("torate nn", rotate + "/");
anim = new RotateAnimation(0, rotate, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(3000); //
anim.setFillEnabled(true);
anim.setFillAfter(true);
startAnimation(anim);
}
//버튼 활성화 , 결과값
private void getText(){
runnable = new Runnable() {
@Override
public void run() {
// textView.setText(title);
button.setEnabled(true);
};
};
handler = new Handler();
handler.postDelayed(runnable,3000);
};

/**
*
* 이미지를 그릴때 호출된다.
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Log.d("test", "onDraw 호출 !!!!!! ");
// 도형의 크기를 지정한다. 원을 그리기위해 view의 크기를 layout에서 지정해야 한다.
final int width = getWidth();
final int height = getHeight();
temp = 0;
// float 형 사각형 클레스 - 도형을 그리기 위해 쓰임
RectF rectf = new RectF(10, 10, width, height);
// 정수형 사각형 클래스 - 글자를 쓰기위해 쓰임
Rect rect = new Rect(10, 10, width, height);

int centerX = (rect.left + rect.right) / 2;
int centerY = (rect.top + rect.bottom) / 2;
int radius = (rect.right - rect.left) / 2;

radius *= 0.5; // 1 will put the text in the border, 0 will put the text in the center. Play with this to set the distance of your text.

for (int i = 0; i < value_degree.length; i++)
{
if (i > 0)
temp += (int) value_degree[i - 1]; // rewrote your code here a bit, to avoid duplicate code.

// 부채골을 그린다.
paint.setColor(COLORS[i]); // 칼리저정
paint.setAntiAlias(true); // 화면 부드럽게
paint.setTextAlign(Paint.Align.CENTER); // 텍스트를 가운데 정렬한다.
canvas.drawArc(rectf, temp, value_degree[i], true, paint); // 캔버스에 paint를 입힌다.
// text를 입힌다.
float medianAngle = (temp + (value_degree[i] / 2f)) * (float)Math.PI / 180f; // this angle will place the text in the center of the arc.
paint.setColor(Color.BLACK);
paint.setTextSize(64); // 텍스트의 크기를 지정한다. DP
paint.setStyle(Paint.Style.STROKE);
canvas.drawText(STRINGS[i], (float) (centerX + (radius * Math.cos(medianAngle))), (float) (centerY + (radius * Math.sin(medianAngle))), paint);
Log.d("TEMP", temp + " STINGS[i] " + STRINGS[i]);
// 회전 버튼을 클릭하면 회전 이벤트를 호출한다.
if (isRotate) {
createAnimation();
canvas.drawCircle(width, height, 0, paint); // 넓이, 높이, 반지름, 그릴 페인트
isRotate = false;
}

}

}

}
}


'android' 카테고리의 다른 글

룰렛3  (0) 2015.11.13
룰렛 2  (1) 2015.11.11
생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
Posted by 양승아
:

룰렛3

android 2015. 11. 13. 18:33 |
package com.test.iunote.rotate_v1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MainActivity extends ActionBarActivity {

CircleManager mCircleManager; //원을 그리는 도구

private String[] STRINGS = { "문화상품권", "100"}; //
// private float values[] = { 1, 1, 10, 20, 68}; // 원의 비율 값이 클수록 커진다.
private float rate[] = { 1, 1};
private float rate2[] = rate;
private float values[] = getArray(rate2);

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

// 원 유틸리티를 초기화한다.
mCircleManager = new CircleManager(this);

// 레이아웃을 불러온다.
LinearLayout linear = (LinearLayout) findViewById(R.id.rotate_circle);
// 버튼 이벤트를 지정한다.
Button btn = (Button) findViewById(R.id.btn_rotate);
// getResult();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 회전할 각도를 지정한다.
mCircleManager.onRotateCircle(3600*getResult()); //회전하는각도 값 보냄
// onDraw를 호출한다.
mCircleManager.invalidate();
}
});
// 레이아웃에 뷰를 추가한다.
linear.addView(mCircleManager);
}


public float[] getArray(float[] values){
for(int i=0;i<values.length;i++){
values[i] = 1;
}
return values ;
}

public int getResult(){
Log.d("getRserulrt", "1");

// API 값을 가져온다.
List<Vo> interfaceDate = new ArrayList<>();
for(int i = 0 ; i < STRINGS.length; i++) {
Log.d("getRserulrt",rate[i]+"for"+STRINGS[i]);

interfaceDate.add(new Vo(STRINGS[i],(int) rate[i]));
}
return getItemOne(interfaceDate);
}

//난수
public int selectRandom(){
Random rand = new Random();
int n = rand.nextInt(100) + 1;
return n;
}

public int getItemOne(List<Vo> list) {
Log.d("getRserulrt","getItemOne");
String value = "";
// setValue
int b = 0;
int initValue = 1;
//minvalue , maxvalue setting
for(int i = 0; i < list.size(); i++) {
list.get(i).setMinV(initValue);
list.get(i).setMaxV(initValue + list.get(i).getValue());
initValue += list.get(i).getValue();
Log.d("TAG",list.get(i).getTitile()+" min : " + list.get(i).getMinV() + "/ max : " + list.get(i).getMaxV());
}
int number = selectRandom();
//난수값이 (if ) minvalue 보다 같거나 크고 / maxvalue 같거나 작고
return 2;
}


public class CircleManager extends View {

private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 페인트
private float[] value_degree;
//
// private int[] COLORS = { Color.YELLOW, Color.GREEN, Color.WHITE, Color.CYAN, Color.RED };
private int[] COLORS = { Color.YELLOW, Color.GREEN};

int temp = 0;
int rotate = 0;
boolean isRotate = false; //제어변수

private Animation anim;

// 기본 생성자
public CircleManager(Context context) {
super(context);
value_degree = calculateData(values);
}


// 비율을 계산해서 원을 그린다.
private float[] calculateData(float[] data) {
float total = 0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
for (int i = 0; i < data.length; i++) {
data[i] = 360 * (data[i] / total);
}
return data;
}

/**
*
* 회전에 대한 옵션을 지정한다.
* @param degree 각도
*/
private void onRotateCircle(int degree) {
// 각도를 지정한다.
this.rotate = degree;
Toast.makeText(getContext(), "회전을 시킨다.", Toast.LENGTH_SHORT).show();
// 회전을 제어한다.
this.isRotate = true;
}

/**
*
* 에니메이션을 만든다.
*
*/
private void createAnimation() {
// anim = new RotateAnimation(0, rotate, getWidth()/2, getHeight()/2);
anim = new RotateAnimation(0, rotate, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(3000); //
anim.setFillEnabled(true);
anim.setFillAfter(true);
startAnimation(anim);
}



/**
*
* 이미지를 그릴때 호출된다.
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Log.d("test", "onDraw 호출 !!!!!! ");
// 도형의 크기를 지정한다. 원을 그리기위해 view의 크기를 layout에서 지정해야 한다.
final int width = getWidth();
final int height = getHeight();
temp = 0;
// float 형 사각형 클레스 - 도형을 그리기 위해 쓰임
RectF rectf = new RectF(10, 10, width, height);
// 정수형 사각형 클래스 - 글자를 쓰기위해 쓰임
Rect rect = new Rect(10, 10, width, height);

int centerX = (rect.left + rect.right) / 2;
int centerY = (rect.top + rect.bottom) / 2;
int radius = (rect.right - rect.left) / 2;

radius *= 0.5; // 1 will put the text in the border, 0 will put the text in the center. Play with this to set the distance of your text.

for (int i = 0; i < value_degree.length; i++)
{
if (i > 0)
temp += (int) value_degree[i - 1]; // rewrote your code here a bit, to avoid duplicate code.

// 부채골을 그린다.
paint.setColor(COLORS[i]); // 칼리저정
paint.setAntiAlias(true); // 화면 부드럽게
paint.setTextAlign(Paint.Align.CENTER); // 텍스트를 가운데 정렬한다.
canvas.drawArc(rectf, temp, value_degree[i], true, paint); // 캔버스에 paint를 입힌다.
// text를 입힌다.
float medianAngle = (temp + (value_degree[i] / 2f)) * (float)Math.PI / 180f; // this angle will place the text in the center of the arc.
paint.setColor(Color.BLACK);
paint.setTextSize(64); // 텍스트의 크기를 지정한다. DP
canvas.drawText(STRINGS[i], (float) (centerX + (radius * Math.cos(medianAngle))), (float) (centerY + (radius * Math.sin(medianAngle))), paint);

// 회전 버튼을 클릭하면 회전 이벤트를 호출한다.
if (isRotate){
createAnimation();
canvas.drawCircle(width, height, 0, paint); // 넓이, 높이, 반지름, 그릴 페인트
isRotate = false;
}

}
}

}
}


'android' 카테고리의 다른 글

안드로이드 룰렛 4 작업중  (0) 2015.11.19
룰렛 2  (1) 2015.11.11
생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
Posted by 양승아
:

룰렛 2

android 2015. 11. 11. 10:52 |
package com.test.iunote.rotate_v1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

CircleManager mCircleManager; //원을 그리는 도구

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

// 원 유틸리티를 초기화한다.
mCircleManager = new CircleManager(this);

// 레이아웃을 불러온다.
LinearLayout linear = (LinearLayout) findViewById(R.id.rotate_circle);
// 버튼 이벤트를 지정한다.
Button btn = (Button) findViewById(R.id.btn_rotate);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 회전할 각도를 지정한다.
mCircleManager.onRotateCircle(2400); //회전하는각도 (랜덤으로변경)
// onDraw를 호출한다.
mCircleManager.invalidate();

}
});
// 레이아웃에 뷰를 추가한다.
linear.addView(mCircleManager);
}

/* 원 유틸리티 클래스 */
public class CircleManager extends View {

private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 페인트
private float[] value_degree;

private int[] COLORS = { Color.YELLOW, Color.GREEN, Color.WHITE, Color.CYAN, Color.RED };
private String[] STRINGS = { "문화상품권", "100", "200", "300","" }; //
private float values[] = { 1, 1, 3, 5, 8}; // 원의 비율 값이 클수록 커진다.

int temp = 0;
int rotate = 0;
boolean isRotate = false; //제어변수

private Animation anim;

// 기본 생성자
public CircleManager(Context context) {
super(context); //view 클래스에 context 정보 보냄
value_degree = calculateData(values); //각 부채꼴 각도
}

// 비율을 계산해서 원을 그린다.
private float[] calculateData(float[] data) {
float total = 0;
for (int i = 0; i < data.length; i++) {
total += data[i]; //총확률
}
for (int i = 0; i < data.length; i++) {
data[i] = 360 * (data[i] / total); //각 부채골 각도구하기
}
return data;
}

/**
*
* 회전에 대한 옵션을 지정한다.
* @param degree 각도
*/
private void onRotateCircle(int degree) {
// 각도를 지정한다.
this.rotate = degree;
Toast.makeText(getContext(), "회전을 시킨다.", Toast.LENGTH_SHORT).show();
// 회전을 제어한다.
this.isRotate = true;
}

/**
*
* 에니메이션을 만든다.
*
*/
private void createAnimation() {
// anim = new RotateAnimation(0, rotate, getWidth()/2, getHeight()/2);
anim = new RotateAnimation(0, rotate, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(3000); //
anim.setFillEnabled(true);
anim.setFillAfter(true);
startAnimation(anim);
}

/**
*
* 이미지를 그릴때 호출된다.
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Log.d("test", "onDraw 호출 ");
// 도형의 크기를 지정한다. 원을 그리기위해 view의 크기를 layout에서 지정해야 한다.
final int width = getWidth();
final int height = getHeight();
temp = 0;
// float 형 사각형 클레스 - 도형을 그리기 위해 쓰임
RectF rectf = new RectF(10, 10, width, height);
// 정수형 사각형 클래스 - 글자를 쓰기위해 쓰임
Rect rect = new Rect(10, 10, width, height);

int centerX = (rect.left + rect.right) / 2;
int centerY = (rect.top + rect.bottom) / 2;
int radius = (rect.right - rect.left) / 2;

radius *= 0.5; // 1 will put the text in the border, 0 will put the text in the center. Play with this to set the distance of your text.

for (int i = 0; i < value_degree.length; i++)
{
if (i > 0)
temp += (int) value_degree[i - 1]; // rewrote your code here a bit, to avoid duplicate code.

// 부채골을 그린다.
paint.setColor(COLORS[i]); // 칼리저정
paint.setAntiAlias(true); // 화면 부드럽게
paint.setTextAlign(Paint.Align.CENTER); // 텍스트를 가운데 정렬한다.
canvas.drawArc(rectf, temp, value_degree[i], true, paint); // 캔버스에 paint를 입힌다.
// text를 입힌다.
float medianAngle = (temp + (value_degree[i] / 2f)) * (float)Math.PI / 180f; // this angle will place the text in the center of the arc.
paint.setColor(Color.BLACK);
paint.setTextSize(64); // 텍스트의 크기를 지정한다. DP
canvas.drawText(STRINGS[i], (float) (centerX + (radius * Math.cos(medianAngle))), (float) (centerY + (radius * Math.sin(medianAngle))), paint);

// 회전 버튼을 클릭하면 회전 이벤트를 호출한다.
if (isRotate){
createAnimation();
canvas.drawCircle(width, height, 0, paint); // 넓이, 높이, 반지름, 그릴 페인트
isRotate = false;
}

}
}

}
}


'android' 카테고리의 다른 글

안드로이드 룰렛 4 작업중  (0) 2015.11.19
룰렛3  (0) 2015.11.13
생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
Posted by 양승아
:

생명주기(작성중)

android 2015. 10. 28. 15:50 |

State diagram for an Android Activity Lifecycle.

'android' 카테고리의 다른 글

룰렛3  (0) 2015.11.13
룰렛 2  (1) 2015.11.11
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Color  (0) 2015.10.13
Posted by 양승아
:

안드로이드 기초 





프로젝트 생성하면 기본으로 생성되는 레이아웃에 텍스트 박스와 버튼을 만들어 봤다.
@는 R.java 클래스에 id를 새로 생성하기 위해서 사용한다.
@+id는 새로생성, @id  는 기존에 있는 아이디를 가리킨다.







액티비티에 onCreate 메소드에 처음 앱 실행시 보여줄 화면을 설정한다.
  setContentView(R.layout.activity_main); 이 부분이 레이아웃 불러오는 부분이고
  Button btn = (Button)findViewById(R.id.btn); 이부분이 레이웃에 설정한 버튼을 불러오는 메소드다.
 이하 메소드는 버튼 클릭시 호출되는 메소드이다. 
 이벤트 발생시 리스너를 통해 이벤트함수를 구현한다. 이부분은 아직 정확히 모르나 , 여기선 리스너를 이용하여 구현함.

다른 방법으로는 레이아웃에서 클릭이벤트 추가, 함수이름 지정하여 액티비티에  동일한 함수를 구현하면 그 함수호출하여 이벤트호출한다.




'android' 카테고리의 다른 글

룰렛 2  (1) 2015.11.11
생명주기(작성중)  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Color  (0) 2015.10.13
리소스에 대해서 - Value  (0) 2015.10.13
Posted by 양승아
:

canvas (원)

android 2015. 10. 16. 15:37 |

public class ShapeActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
//setContentView(R.layout.activity_shape);

/* //리소스test
//Textview에서 리소스 가져온다
TextView textView =(TextView)findViewById(R.id.text_view);
//Textview의 문자열을 해달 리소스ID의 문자열로 변경한다
textView.setText(R.string.sample_string);
//TextView의 배경색을 해당 Color리소스로 적용한다.
textView.setBackground(R.color.RED);*/
}

private class MyView extends View{

public MyView(Context context){
super(context);
}
@Override
protected void onDraw(Canvas canvas){
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
RectF rect = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());

//Example values
int mRadius = 300;
rect.set(getWidth() / 2 - mRadius, getHeight() / 2 - mRadius, getWidth() / 2 + mRadius, getHeight() / 2 + mRadius);

Paint p1 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint p2 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint p3 = new Paint(Paint.ANTI_ALIAS_FLAG);

p1.setColor(Color.RED);
p2.setColor(Color.BLUE);
p3.setColor(Color.YELLOW);

canvas.drawArc(rect, 0, 60, true, p1);
canvas.drawArc(rect, 60, 60, true, p2);
canvas.drawArc(rect, 120, 60, true, p3);
canvas.drawArc(rect, 180, 60, true, p1);
canvas.drawArc(rect, 240, 60, true, p2);
canvas.drawArc(rect, 300, 60, true, p3);
canvas.rotate(180, getWidth()/2, getHeight()/2);
//canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, canvas.getWidth()/3,p1);



}
}


'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
리소스에 대해서 - Color  (0) 2015.10.13
리소스에 대해서 - Value  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
:

리소스에 대해서 - Color

android 2015. 10. 13. 16:10 |

리소스에 대해서 - Color


이전 소스를 이용하여 

values 폴더 이하에  colors.xml 새로 생성한다. 


colors.xml


main.xml


color를 리소스로 추가


실행해보면 textview배경화면이 빨강색으로 나온다.


java소스로 구현해보면


실행해보면 위와같다.


치수에 대한 리소스


치수는 6가지가 존재한다.

px : 화면의  점하나의 단위, 10개의 점이 수평되어 있으면 너비가 10px이다.

dip/dp : 160dip 기준으로 1dip = 1px 이다. 이것을 화면에 상대적인 밀도 독립 필셀이라고 한다. 

sp : 크기 독립적인 필셀

pt: : 물리적 단위 

in :  물리적 단위

mm : 물리적 단위



px 는 절대적은 수치이기 때문에 단말기마다 px 가 다르므로 대도록이면 배제해야 한다.


dp 는 단말기에 따라 유동적인 수치임


[Dip 구하는 공식]

pixel / ( Density / 160 ) = DIP

 

[Pixel 구하는 공식]

( DIP * ( Density / 160 ) ) + 0.5 = Pixel




Layout을 작성할때 XML 상에서는 DIP 단위를 사용할 수 있으나

Java 소스로 Layout을 작성할 때는 사용할 수 없다.

Pixel의 수치를 DIP로 변경하는 공식을 사용하여야 한다.

그러므로 위의 공식이 필요할 것이다.

 

위의 공식을 처리해 주는 유용한 Class도 존재한다.

 

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIPDIP값, getResources().getDisplayMetrics());

 

해당 applyDimmension() 함수를 사용하면 결과 값으로 Pixel 값을 전달해 주는 것이다. 

본 함수는 다양한 수치들을 모두 변환해 준다.



'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Value  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
:

리소스에 대해서 - Value

android 2015. 10. 13. 15:29 |

리소스에 대해서 -1편


새로운 안드로이드 프로젝트를 생성하면 기본적으로  res 폴더가 생성된다.

res아래  


strings.xml 더블클릭하여 

string 추가하여 저장한다. 


R.java에 string 추가되었는지 확인.


R.java에 추가된것을 알수있다. 


그럼 이렇게 자동으로 누가 R.java를 생성해주는것일까 ??

개발환경  설치 할때 ADT (android development toolkit)플러그인을 설치하여 바로 ADT가 모든 리소스에 대한 ID를 부여하고 R.java라는 파일을 생성해 주는 것이다.


그럼 추가한 리소스를 사용방법을 알아보자.


* .xml 을 통해 사용하는 방법

main.xml


위와 같이 xml에 추가


xml에 추가한 내용을 살펴보면 

형식: "@[package:]type/name"


@ : 리소스 참조의 시작을 알림

[package] : 리소스가 존재하는 패키지명을 입력한다 즉 @com.test.Resource:string/sample_string

길기때문에 패키지  내부에 있는 리소스의 경우 생략이 가능하다.

외부 패키지의 리소스를 참조할 때는 꼭 적어 주어야한다.!


해당 리소스의 형식(type) 을 적어준다. 리소스를 추가했을때를 생각해봐.

<string......>으로  시작했다..이것이 바로 type!!!이다.


리소스명 (name) : 리소스 추가시 적어 주었던 name을 적어주면 된다.

     ↑ type            ↑name



* java 소스에서 어떻게 리소스를 참고하는 방법

main.xml

xml에 추가하고


java 파일 소스를 작성해보자.


Textview의 문자를 변경하기위해서 리소스 ID를 주고 

ID 가 text_view 인 Textview에 R.string.sample_string 의 문자열로 변경하였다.


위와같이 R.java 가 존재함으로 R.string.sample_string 접근 가능하다.

위 실행결과는 위의 xml 실행결과와 같다.



'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Color  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
: