首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 在 Bitmap/Canvas 上動態添加按鈕:使用 RelativeLayout 疊加自訂 View 與按鈕

     編輯:程式設計綜合問答

將自訂繪圖 View(覆寫 onDraw 繪製 Bitmap/Canvas)與動態建立的 Button 加入同一 RelativeLayout,利用 LayoutParams 定位按鈕於底部左右。

核心程式碼

public class SignatureActivity extends Activity implements View.OnClickListener {
    private SignatureView signatureView;
    private Button saveBtn, clearBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        signatureView = new SignatureView(this);

        RelativeLayout root = new RelativeLayout(this);
        root.setLayoutParams(new RelativeLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));

        // 簽名視圖
        root.addView(signatureView, new RelativeLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));

        // 儲存按鈕 - 左下
        saveBtn = new Button(this);
        saveBtn.setText("儲存");
        saveBtn.setOnClickListener(this);
        RelativeLayout.LayoutParams saveParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
        saveParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        saveParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        saveParams.setMargins(20, 0, 0, 20);
        root.addView(saveBtn, saveParams);

        // 清除按鈕 - 右下
        clearBtn = new Button(this);
        clearBtn.setText("清除");
        clearBtn.setOnClickListener(this);
        RelativeLayout.LayoutParams clearParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
        clearParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        clearParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        clearParams.setMargins(0, 0, 20, 20);
        root.addView(clearBtn, clearParams);

        setContentView(root);
    }

    @Override
    public void onClick(View v) {
        if (v == saveBtn) { signatureView.save(); }
        else if (v == clearBtn) { signatureView.clear(); }
    }
}

SignatureView 要點

  • 繼承 View,onDraw 中繪製 Bitmap 與路徑。
  • 觸控事件記錄路徑點,invalidate() 觸發重繪。
  • save() 將 Bitmap 壓縮存檔,clear() 重置路徑並 invalidate()。

優點

  • 按鈕屬於標準 View 階層,自動處理觸控、無障礙、樣式。
  • 無需在 Canvas 上手繪按鈕並自行判斷點擊座標。
  • 相容各種螢幕尺寸與方向。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved