Android程式碼實現自定義Button
繼承View,在裡面自己去實現onDraw(), onMeasure(), onClickListener()等方法。這種方式比較靈活,可以實現複雜的需求。
程式碼樣例如下:
public class CustomButton extends View{
private final static int WIDTH_PADDING = 8;
private final static int HEIGHT_PADDING = 10;
private final String label;
private final int imageResId;
private final Bitmap image;
//private final InternalListener listenerAdapter = new InternalListener();
public CustomButton(Context context, int resImage, String label)
{
super(context);
this.label = label;
this.imageResId = resImage;
this.image = BitmapFactory.decodeResource(context.getResources(),
imageResId);
setFocusable(true);
setBackgroundColor(Color.WHITE);
//setOnClickListener(listenerAdapter);
setClickable(true);
}
@Override
protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect){
this.setBackgroundColor(Color.GREEN);
}
@Override
protected void onDraw(Canvas canvas)
{
Paint textPaint = new Paint();
textPaint.setColor(Color.BLACK);
canvas.drawBitmap(image, WIDTH_PADDING / 2, HEIGHT_PADDING / 2, null);
canvas.drawText(label, WIDTH_PADDING / 2, (HEIGHT_PADDING / 2) +
image.getHeight() + 8, textPaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(measureWidth(widthMeasureSpec),
measureHeight(heightMeasureSpec));
}
private int measureWidth(int measureSpec)
{
int preferred = image.getWidth() * 2;
return getMeasurement(measureSpec, preferred);
}
private int measureHeight(int measureSpec)
{
int preferred = image.getHeight() * 2;
return getMeasurement(measureSpec, preferred);
}
private int getMeasurement(int measureSpec, int preferred)
{
int specSize = MeasureSpec.getSize(measureSpec);
int measurement = 0;
switch(MeasureSpec.getMode(measureSpec))
{
case MeasureSpec.EXACTLY:
// This means the width of this view has been given.
measurement = specSize;
break;
case MeasureSpec.AT_MOST:
// Take the minimum of the preferred size and what
// we were told to be.
measurement = Math.min(preferred, specSize);
break;
default:
measurement = preferred;
break;
}
return measurement;
}
/* public void setOnClickListener(ClickListener newListener)
{
listenerAdapter.setListener(newListener);
}*/
public String getLabel()
{
return label;
}
/**
* Returns the resource id of the image.
*/
public int getImageResId()
{
return imageResId;
}
/* private class InternalListener implements View.OnClickListener
{
private ClickListener listener = null;
public void setListener(ClickListener newListener)
{
listener = newListener;
}
@Override
public void onClick(View v)
{
if (listener != null)
{
listener.onClick(CustomImageButton.this);
}
}
}*/
}
相關文章
- android自定義button樣式Android
- Android自定義圓形進度條實現程式碼Android
- Android自定義拍照實現Android
- Android 實現自定義圓環Android
- 直播系統程式碼,Android自定義View實現呼吸燈效果AndroidView
- 自定義Button高亮狀態
- React Native自定義ButtonReact Native
- 自定義view————開關buttonView
- android checkbox自定義去修改background而不是buttonAndroid
- android 自定義ScrollView實現背景圖片伸縮的實現程式碼及思路AndroidView
- Android 程式設計程式碼-自定義 ToastAndroid程式設計AST
- 自定義Android Studio程式碼模板Android
- Houdini - 建立自定義的button樣式
- Qt實現畫板部件並和自定義button按鈕結合例項QT
- node.js實現的自定義事件程式碼例項Node.js事件
- app直播原始碼,el-button自定義圖片顯示APP原始碼
- 直播平臺原始碼,Android自定義View實現呼吸燈效果原始碼AndroidView
- js自定義實現的簡單編碼和解碼程式碼例項JS
- 一行程式碼實現自定義轉場動畫--iOS自定義轉場動畫集行程動畫iOS
- Android自定義控制元件之自定義ViewGroup實現標籤雲Android控制元件View
- 自定義View:自定義屬性(自定義按鈕實現)View
- Android 自定義實現switch開關按鈕Android
- Android自定義View實現文字輪播效果AndroidView
- Android自定義view實現數字時鐘AndroidView
- 直播原始碼開發,el-button自定義圖片顯示原始碼
- 直播平臺原始碼,el-button自定義圖片顯示原始碼
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- Android 自定義 View 實現橫行時間軸AndroidView
- Android自定義View:快遞時間軸實現AndroidView
- Android自定義View實現微信打飛機遊戲AndroidView遊戲
- 自定義來電秀怎麼實現?Android 來電秀原始碼分析Android原始碼
- 自定義View:畫布實現自定義View(折線圖的實現)View
- android問題之Button自定義樣式selector後,點選無效果Android
- Net 實現自定義Aop
- EventSource的自定義實現
- 微信分享自定義實現
- 【朝花夕拾】Android自定義View篇之(四)自定義View的三種實現方式及自定義屬性詳解AndroidView
- Android自定義view之實現帶checkbox的SnackbarAndroidView