Baloon Custom View example
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);
}
}