2015-05-24 36 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)