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
- Çağırmak gerek yukarıdaki Petek ve unutma
setLayerType(LAYER_TYPE_SOFTWARE, mShadow)
, aksi takdirde gölge göremez! (@Dmitriy_Boichenko) 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ş:
Nasıl özel arka plan resimleri ile gez...
Android özel şekle gölge Ekle...
Nasıl AngularJS görünümünde kısmi özel...
Lisp makroları bu kadar özel yapan ned...
Özel bir Github repo klonlama...