如何创建将显示图像的自定义形状?

时间:2014-09-04 10:36:34

标签: android android-layout ios7 android-shape

在项目中,我必须在不同的shape中显示个人资料图片和其他图片。我不知道如何创建这样的形状,以及如何在其中显示图像。我也必须在列表视图中放置这种形状。请建议我。

提前致谢。

3 个答案:

答案 0 :(得分:1)

尝试类似的东西:

profileImageview=[[UIImageView alloc]initWithFrame:CGRectMake(2,10,100,80)];
    UIBezierPath *path = [UIBezierPath new];
    [path moveToPoint:(CGPoint){0, 0}];
    [path addLineToPoint:(CGPoint){100, 0}];
    [path addLineToPoint:(CGPoint){70, 80}];
    [path addLineToPoint:(CGPoint){0, 80}];
    [path addLineToPoint:(CGPoint){0, 0}];

     CAShapeLayer *mask = [CAShapeLayer new];
    mask.frame = profileImageview.bounds;
    mask.path = path.CGPath;

    // Mask the imageView's layer with this shape
    profileImageview.layer.mask = mask;

答案 1 :(得分:0)

根据需要使用bezier路径使用bazie rpaths并创建所需的形状图层,并将其作为子图层添加到图像视图中。

例如圆形imageView代码如下:

     UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.width/2, self.height/2) radius:MIN(self.width, self.height)/2 startAngle:0.0f endAngle:2 * M_PI clockwise:YES]; 
     CAShapeLayer *maskCircularShapeLayer = [CAShapeLayer layer]; maskCircularShapeLayer.path = path.CGPath;
     [self.layer addSublayer:maskCircularShapeLayer];

答案 2 :(得分:0)

我试过并获得Android的解决方案。我正在分享我所做的一切。

  • 我刚刚创建了一个扩展查看类的 CustomShape 类。
  • 覆盖onDraw()方法。
  • 创建了一个Paint和Path对象。
  • 画线到坐标。
  • 从资源创建一个位图,以显示形状内的图像。
  • 创建一个BitmapShader对象并将其设置为Paint。
  • 使用Path和Paint对象绘制画布。
  • 使用XML创建布局并添加了CustomeShape。
  • 创建并实例化CustomShape对象。

以下是CustomShape类的代码:

public class CustomShape extends View {
Bitmap bitmap;
BitmapShader bitmapShader;

public CustomShape(Context context) {
    super(context);
    // TODO Auto-generated constructor stub

}

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

public CustomShape(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}


@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);

    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
    Path pth = new Path();
    pth.moveTo(0, 0);

    pth.lineTo(100, 0);
    pth.lineTo(70, 100);
    pth.lineTo(0, 100);

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.ppp);
    bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
            Shader.TileMode.REPEAT);
    p.setShader(bitmapShader);
    canvas.drawPath(pth, p);
}

以下是MainActivity.java的代码

public class MainActivity extends Activity {

CustomShape customShape;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_main);

    customShape = (CustomShape) findViewById(R.id.customeShape);

    }

}

这是布局

 <com.example.btndemo.CustomShape
      android:id="@+id/customeShape"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />