带有下拉阴影的自定义图像视图

带有下拉阴影的自定义图像视图

好吧,我一直在阅读和搜索,现在我的头撞在墙上,试图找出这一点。到目前为止,我的情况如下:

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);}@Overrideprotected void onDraw(Canvas canvas) {
    Rect r = mRect;
    Paint paint = mPaint;

    canvas.drawRect(r, paint);
    super.onDraw(canvas);}@Overrideprotected 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”是暂时的;据我所知,我需要做一些数学来确定下降阴影添加到画布中的大小,对吗?

但当我用这个:

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;}

在我的ImageView中,当我运行程序时,我仍然只得到一个普通的ImageView。

有什么想法吗?谢谢。



森栏
浏览 421回答 3
3回答

哆啦的时光机

好吧,我没有预见到这个问题会有更多的答案,所以我现在要做的只是一个矩形图像的解决方案。我使用了以下NinePatch:以及XML中的适当填充:<ImageView &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:id="@+id/image_test" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:background="@drawable/drop_shadow" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width="wrap_content" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height="wrap_content" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:paddingLeft="6px" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:paddingTop="4px" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:paddingRight="8px" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:paddingBottom="9px" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:src="@drawable/pic1" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/>为了获得一个相当好的结果:不太理想,但也行。

萧十郎

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);希望这能帮上忙。注记不要忘记蜂窝和上面你需要调用setLayerType(LAYER_TYPE_SOFTWARE, mShadow),否则你将看不到你的影子!(@Dmitriy_Boichenko)SetShadowLayer不幸的是,硬件加速不能工作,因此它大大降低了性能
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java