我有LinearLayout
我需要动态添加自定义视图。自定义视图已正确添加。但现在我想点击该视图。我累了。
BlockView localView = new BlockView(getApplicationContext(),
BitmapFactory.decodeFile(imagePath);
localView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
layoutBox.addView(localView);
BlockView.java
public class BlockView extends View{
Bitmap mBitmap;
Drawable mDrawable;
private int drawableWidth, drawableHeight;
private int viewWidth, viewHeight, layoutHeight, layoutWidth;
private Matrix matrix = new Matrix();
private Paint mBorderPaint;
public BlockView(Context c) {
super(c);
setFocusable(true);
}
public BlockView(Context c, AttributeSet attrs) {
super(c, attrs);
setDrawingCacheEnabled(true);
}
public BlockView(Context paramContext, Bitmap bmp, int layoutHeight,
int layoutWidth) {
super(paramContext);
this.mBitmap = bmp;
this.layoutHeight = layoutHeight;
this.layoutWidth = layoutWidth;
mBorderPaint = new Paint();
// mBorderPaint.setAntiAlias(true);
mBorderPaint.setStyle(Paint.Style.STROKE);
mBorderPaint.setColor(Color.GREEN);
mBorderPaint.setStrokeWidth(10);
setDrawingCacheEnabled(true);
buildDrawingCache(true);
mDrawable = new BitmapDrawable(getResources(), mBitmap);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
drawableWidth = mDrawable.getIntrinsicWidth();
drawableHeight = mDrawable.getIntrinsicHeight();
viewWidth = layoutWidth;
viewHeight = layoutHeight;
setMeasuredDimension(viewWidth, viewHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
try {
int saveCount = canvas.save();
float scale;
float dx;
float dy;
if (drawableWidth <= viewWidth && drawableHeight <= viewHeight) {
scale = 1.0f;
} else {
scale = Math.min((float) viewWidth / (float) drawableWidth,
(float) viewHeight / (float) drawableHeight);
}
dx = (int) ((viewWidth - drawableWidth * scale) * 0.5f + 0.5f);
dy = (int) ((viewHeight - drawableHeight * scale) * 0.5f + 0.5f);
matrix.setScale(scale, scale);
matrix.postTranslate(dx, dy);
canvas.concat(matrix);
mDrawable.setBounds(0, 0, drawableWidth, drawableHeight);
mDrawable.draw(canvas);
canvas.restoreToCount(saveCount);
} catch (Exception ex) {
Log.e("onDraw: ", ex.getMessage());
ex.printStackTrace();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
}
但是onClick
没有用。我不知道我哪里出错了。
帮我解决一下!!
答案 0 :(得分:0)
首先你需要在布局上添加View(),之后需要注册clickLisner。
layoutBox.addView(localView); // this line will become first.
localView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
答案 1 :(得分:0)
是否自动生成了onclickListener,我的意思是你应该使用View.OnClickListener。如果未使用,则无法覆盖onClickListener
localView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
layoutBox.addView(localView);
答案 2 :(得分:0)
试试这个希望它会帮助你
// viewHolder is your View Custom view
@Override
public void setOnClickListener(OnClickListener l) {
if (l == null) {
viewHolder.setOnClickListener(null);
mParentOnClickListener = null;
} else {
viewHolder.setOnClickListener(mOnClickListener);
mParentOnClickListener = l;
}
}
private View.OnClickListener mParentOnClickListener;
private View.OnClickListener mOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (mParentOnClickListener != null) {
mParentOnClickListener.onClick(YourCustomView.this);
}
}
};