2015-05-24 41 views
1

对于我正在建设的Android应用程序,我做了一个自定义的ImageView类,需要显示在图像上打勾指示此图像已被选中。 我从可绘制的资源中加载了刻度图像并将其显示在图像顶部,并且它工作正常。但是我想要做的是,当可以看到刻度时(即选择图像时),图像变暗,以便您可以清楚地看到刻度。 我该怎么做?安卓系统 - 自定义ImageView与勾选标记图像为选择

我的代码当前如下:

public class TickedImageView extends ImageView { 

private boolean selected = true; 
private Bitmap tickBmp; 
private Paint paint = new Paint(); 

public TickedImageView(Context context) { 
    super(context); 
    tickBmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_done_white_48dp); 
} 

public TickedImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    tickBmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_done_white_48dp); 
} 

public void setSelected(boolean selected) { 
    this.selected = selected; 
    invalidate(); 
} 

public boolean isSelected() { 
    return selected; 
} 

@Override 
protected void onDraw(@NonNull Canvas canvas) { 
    super.onDraw(canvas); 

    if(selected) { 
     int margin = 15; 
     int x = (canvas.getWidth()/2) - (tickBmp.getWidth()/2) - margin; 
     int y = (canvas.getHeight()/2) - (tickBmp.getHeight()/2) - margin; 

     canvas.drawBitmap(tickBmp, x, y, paint); 
    } 
} 
} 

谢谢。

回答

0

如果我是你,我会使用2张图片,一张浅色,另一张较暗,从@drawable文件夹中选择,在选定的项目上,我会调用较暗的图片。

公司希望我的想法给你答案

更新:

尝试用alpha属性(yourPaintObject.setAlpha(60);)演奏会帮助你

paint.setAlpha(60);     //you can set your transparent value here 
canvas.drawBitmap(tickBmp, x, y, paint); 

看到这个answer已经在SO

+0

是的,但我从相机胶卷中获取图像。我想要做的是从相机滚动图像变暗,以便我可以清楚地看到白色勾号 – fergaral

+0

对不起...错过了...让我更新我的答案 –

0

在您的画布中,只需在原始图像顶部绘制另一个带有深色和透明度的矩形。见下面

public class TickedImageView extends ImageView { 

    private boolean selected = true; 
    private Bitmap tickBmp; 
    private Paint paint; 
    private Paint mDarkerPaint; 
    private int measuredWidth, measuredHeight; 

    public TickedImageView(Context context) { 
     super(context); 
     init(); 
    } 

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

    private void init() { 
     paint = new Paint(); 
     mDarkerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     mDarkerPaint.setStyle(Paint.Style.FILL); 
     // Keep changing this color till it looks ok for you 
     mDarkerPaint.setColor(0x80142030); 
     tickBmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_done_white_48dp); 
    } 


    public void setSelected(boolean selected) { 
     this.selected = selected; 
     invalidate(); 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     measuredHeight = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); 
     measuredWidth = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); 

     setMeasuredDimension(measuredWidth, measuredHeight); 
    } 

    @Override 
    protected void onDraw(@NonNull Canvas canvas) { 
     super.onDraw(canvas); 

     if (selected) { 
      int margin = 15; 
      int x = (canvas.getWidth()/2) - (tickBmp.getWidth()/2) - margin; 
      int y = (canvas.getHeight()/2) - (tickBmp.getHeight()/2) - margin; 

      canvas.drawRect(0, 0, measuredWidth, measuredHeight, mDarkerPaint); 
      canvas.drawBitmap(tickBmp, x, y, paint); 
     } 
    } 
} 
0

您可以使用setAlpha(浮动), 0.0 - >不透明的1.0 - >完全可见

TickeredImageView imageView = new TickeredImageView(this); 
imageView.setAlpha((float) desired_opacity) 

如果使用APK 16+,您可以使用setImageAlpha(INT):

imageView.setImageAlpha((int) desired_opacity)