SORU
12 EYLÜL 2010, Pazar


Özel gölge ile İmageView

Tamam, arama ve etrafında, ve şimdi kafama vurarak ben duvarın bu işi çözmeye karşı okudum. Şimdiye kadar var:

package com.pockdroid.sandbox;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.widget.ImageView;

public class ShadowImageView extends ImageView {

private Rect mRect;
private Paint mPaint;

public ShadowImageView(Context context)
{
    super(context);
    mRect = new Rect();
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setShadowLayer(2f, 1f, 1f, Color.BLACK);
}

@Override
protected void onDraw(Canvas canvas) 
{
    Rect r = mRect;
    Paint paint = mPaint;

    canvas.drawRect(r, paint);
    super.onDraw(canvas);
}

@Override
protected void onMeasure(int w, int h)
{
    super.onMeasure(w,h);
    int mH, mW;
    mW = getSuggestedMinimumWidth() < getMeasuredWidth()? getMeasuredWidth() : getSuggestedMinimumWidth();
    mH = getSuggestedMinimumHeight() < getMeasuredHeight()? getMeasuredHeight() : getSuggestedMinimumHeight();
    setMeasuredDimension(mW   5, mH   5);
}

}

"5" Ölçümler sırasında geçici olarak orada; ben gölge tuval katıyor, değil mi? boyutunu belirlemek için biraz hesap yapmak gerekiyor anladığım kadarıyla

Ama bunu kullanırken:

public View getView(int position, View convertView, ViewGroup parent) {
    ShadowImageView sImageView;
    if (convertView == null) {
        sImageView = new ShadowImageView(mContext);
        GridView.LayoutParams lp = new GridView.LayoutParams(85, 85);
        sImageView.setLayoutParams(lp);

        sImageView.setScaleType(ImageView.ScaleType.CENTER);
        sImageView.setPadding(5,5,5,5);
    } else {
        sImageView = (ShadowImageView) convertView;
    }

    sImageView.setImageBitmap(bitmapList.get(position));
    return sImageView;
}

benim İmageView, hala programını çalıştırdığımda sadece normal bir İmageView.

Herhangi bir düşünce? Teşekkürler.

RomainGuy ile IRC kanalında bazı konuştum, ve o çalışma şimdi kod ile aşağıda düz dikdörtgen görüntüler var. o Yüzden EDİT: Yine de hala araştırıyorum, yani doğrudan benim bitmap şeffaflık için gölge ama beraberlik olmaz.

@Override
protected void onDraw(Canvas canvas) 
{
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.omen);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK);
    canvas.drawColor(Color.GRAY);
    canvas.drawRect(50, 50, 50   bmp.getWidth(), 50   bmp.getHeight(), paint);
    canvas.drawBitmap(bmp, 50, 50, null);       
}

CEVAP
16 EYLÜL 2010, PERŞEMBE


Bu Devoxx de Romain Adam sunu alınır, here pdf buldum.

Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow);

Bu yardımcı olur umarım.

NOTLAR

  1. Çağırmak gerek yukarıdaki Petek ve unutma setLayerType(LAYER_TYPE_SOFTWARE, mShadow), aksi takdirde gölge göremez! (@Dmitriy_Boichenko)
  2. SetShadowLayer mu değil donanım hızlandırma ile ne yazık ki büyük ölçüde iş azaltır performansları (@Matt Giymek) 11* [2] *

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012
  • njhaley

    njhaley

    24 NİSAN 2006