2017-02-26 22 views
0

私は、ユーザーがアプリケーションに画像を表示するために、下側に斜めにカットされた画像ビューを実装しようとしています。これは私が取るアプローチですカスタムImageViewが画像を表示していません

  1. ImageViewを拡張するカスタムクラスを作成します。
  2. 私は、図形を描画するonDrawメソッドをオーバーライドします(私は私のカスタムImageViewのクラスは

    public class DiagonalSquare extends ImageView { 
    
    private Context mContext; 
    Paint paint ; 
    Path path; 
    
    public DiagonalSquare(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        this.mContext = context; 
        setWillNotDraw(false); 
        paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    } 
    
    @Override 
    protected void onDraw(Canvas canvas) { 
    
        int w = getWidth(), h = getHeight(); 
        paint.setStrokeWidth(2); 
        paint.setColor(Color.WHITE); 
        paint.setStyle(Paint.Style.FILL_AND_STROKE); 
        paint.setAntiAlias(true); 
    
        path = new Path(); 
        path.setFillType(Path.FillType.EVEN_ODD); 
    
        path.moveTo(w,h*3/4); 
        path.lineTo(w,h); 
        path.lineTo(0,h); 
        path.close(); 
        canvas.drawPath(path, paint); 
        } 
    } 
    

正しい事をやっているかはわからない場所です

The result I end up getting

これは私が最終的に得ているものです - 青い部分はイメージビューです。ここにはxmlがあります

<com.noel.CustomShape.DiagonalSquare 
      android:id="@+id/background_image" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      android:scaleType="centerCrop" 
      app:layout_collapseMode="parallax" 
      android:src="@drawable/bebe" /> 

答えて

0

あなたは@Dimezis答えに加えてsuper.onDraw(canvas);

1

への呼び出しが欠落している:あなたはImageView背景に透明効果を持っているしたい場合は、ハードウェア層の種類をクリアする必要があり、また、のように痛みのためXfermodeを設定たとえば、次の

package com.j2ko.customviews; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PorterDuff; 
import android.graphics.PorterDuffXfermode; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class CustomImageView extends ImageView { 
    private Context mContext; 
    Paint paint ; 
    Path path; 

    public CustomImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.mContext = context; 
     setWillNotDraw(false); 
     //Move to XML if needed 
     setBackgroundColor(Color.TRANSPARENT); 
     setLayerType(LAYER_TYPE_HARDWARE, null); 
     paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     int w = getWidth(), h = getHeight(); 
     paint.setStrokeWidth(2); 
     paint.setColor(Color.WHITE); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setAntiAlias(true); 

     path = new Path(); 

     path.setFillType(Path.FillType.EVEN_ODD); 

     path.moveTo(w,h*3/4); 
     path.lineTo(w,h); 
     path.lineTo(0,h); 
     path.close(); 
     canvas.drawPath(path, paint); 
    } 
} 

これは、次のような結果が得られます:

enter image description here

+0

これは機能し、描画された領域の透明度を設定するのに役立ちました –

関連する問題