마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

xml파일을 컨트롤할수 잇는방법은 없을까요?

0 추천

layout.xml에 제가 만든 view소스를 컴포넌트로 사용할려면 어떻게 해야하는지요?
 
예를 들어서 아래와 같이 extends view를 만들었다고하면은요

 activity_main.xml
=========================================================
 
<?xml version="1.0" encoding="utf-8"?>
 <FrameLayout           
   xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
 <com.TestView
  android:id="@+id/mTestView"
  android:layout_width="500dp"
  android:layout_height="500dp"/>
 
<TextView android:text="그림에 대한설명"
  android:layout_width="100dp"
  android:layout_height="100dp"/>
 </FrameLayout>


public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState););
  setContentView(R.layout.activity_main); 
 }
}


 
public class TestView extends View {
 
  //-------------------------------------
 //  생성자
 //-------------------------------------
     public Bitmap m_bitmap = null;
 
     public TestView(Context context, AttributeSet attrs) {
        super(context, attrs);
  
        setFocusable(true);
     }
     protected void onFinishInflate ()
     {
         int width, height;
         // 페인트 객체를 생성한다.
         m_paint = new Paint();
         m_paint.setAntiAlias(true);
         m_paint.setColor(Color.RED);
         // 선의 두께를 1로 한다.
         m_paint.setStrokeWidth(1);
         // 도형을 그릴때 내부에 색이 채워지지 않도록 속성을 설정한다.
         m_paint.setStyle(Paint.Style.STROKE);
       
 Display display = ((WindowManager) mContext.getSystemService (Context.WINDOW_SERVICE)).getDefaultDisplay();
 width = display.getWidth();  // View의 가로 폭
 height = display.getHeight() - 50;   // View의 세로 높이
 
 m_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.color);
 m_bitmap = Bitmap.createScaledBitmap(m_bitmap, width, height, false);      
     }
   
 
}
 
MainActivity에서 TestView의 m_bitmap을 컨트롤할수 있는 방법이 없을까요?

예를 들어서 이미지를 변경할수 잇는 방법이 없을까요?

그리고 xml파일에 아래아 같이  View파일을 넣는 방식을 무엇이라고 하나요?

<?xml version="1.0" encoding="utf-8"?>
 <FrameLayout           
   xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
 <com.TestView
  android:id="@+id/mTestView"
  android:layout_width="500dp"
  android:layout_height="500dp"/>
 
<TextView android:text="그림에 대한설명"
  android:layout_width="100dp"
  android:layout_height="100dp"/>
 </FrameLayout>

헨씀히포 (3,660 포인트) 님이 2014년 2월 23일 질문

1개의 답변

0 추천
 
채택된 답변
  1. custom class 를 만들때 생성자를 모두다 넣으세요 3개
    대충 이런식이죠
    public LinearBase(Context context) {
        super(context);
        initLayout();
    }
     
    public LinearBase(Context context, AttributeSet attrs) {
        super(context, attrs);
        initLayout();
    }
     
    public LinearBase(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initLayout();
    }
  2. initLayout 은 공통적인 요소를 위해서 생성합니다. 
  3. 이미지를 띄울때 굳이 저리 할 필요가 없습니다. ImageView 를 하나 생성하고 addView 한뒤  비트맵을 설정 하세요 
aucd29 (218,390 포인트) 님이 2014년 2월 24일 답변
헨씀히포님이 2014년 2월 25일 채택됨
답변 고맙습니다
제가 궁금한건 처음 실행할때말고 실행하고 난 다음에 중간에 public class TestView extends View 에 변수를 MainActivity 에서 컨트롤 할수있는지 궁금합니다

TestView 에서 ImageView를 생성하라는 겁니까?
ImageView에서 색상정보를 얻어올수 잇나요?
1. public method 를 만드시면 컨트롤 되지요
2. 네 View 보다는 LinearLayout  과 같은 류를 이용하면 더 사용하기 편하시겠죠
3. 색상정보를 얻어오는 부분은 적어두신 코드에는 없습니다만?
혹 테두리를 위한 것 이라면 background color 같은걸 설정해서 테두리를 주실 수 있죠, 그 색을 가져올 수도 있구요 직접 그리기 보다는 이미 존재하는 클래스를 이용하시는게 여러모로 편리하실겁니다.
지금 다른일을 하고 잇어서 내일이라도 말씀하신대로 해보겠습니다 내일 다시 질문 드리겠습니다
...