Android/Baloon Custom view

Baloon Custom View example

Soul-Learner 2010. 8. 4. 22:03

package com.dearpeople.android.test.custom;

import android.content.*;
import android.graphics.*;
import android.graphics.*;
import android.util.*;
import android.widget.*;

public class BaloonLayout extends LinearLayout {

 public BaloonLayout(Context context) {
  super(context);
 }

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

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  // 아래의 코드가 꼭 필요함 (현재 레이아웃의 크기를 결정함)
  this.setMeasuredDimension(200, 200);
 }

 @Override
 protected void dispatchDraw(Canvas canvas) {

  Paint panelPaint = new Paint();

  RectF baloonRect = new RectF();
  baloonRect.set(0,0, getMeasuredWidth(), 2*(getMeasuredHeight()/3));
  panelPaint.setARGB(230, 255, 255, 255);
  canvas.drawRoundRect(baloonRect, 10, 10, panelPaint);

  Path baloonTip = new Path();
  baloonTip.moveTo(5*(getMeasuredWidth()/8), 2*(getMeasuredHeight()/3));
  baloonTip.lineTo(getMeasuredWidth()/2, getMeasuredHeight());
  baloonTip.lineTo(3*(getMeasuredWidth()/4), 2*(getMeasuredHeight()/3));

  canvas.drawPath(baloonTip, panelPaint);

  super.dispatchDraw(canvas);
 }

}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  android:layout_gravity="center_horizontal"
  android:gravity="center">
 
 <com.dearpeople.android.test.custom.BaloonLayout
  android:id="@+id/baloonLayout"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
 </com.dearpeople.android.test.custom.BaloonLayout>
 
</LinearLayout>


CustomUITest.java
package com.dearpeople.android.test.custom;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class CustomUITest extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }
}