有任何想法吗?如果您需要更多信息让我知道,这是一个奇怪的问题所以我知道我可能没有提到重要的事情.
威廉
解决方法 有几种方法可以攻击它.我在这里概述其中两个……单程:
您可以在位图周围定义BitmapDrawable.将其TileMode设置为重复.通过setBounds(rect)给它一些边界,其中rect是你的Rect实例.
以下是使用VIEw onDraw作为上下文的简短示例:
public class MyVIEw extends VIEw { Rect rect; Bitmap mBitmap; BitmapDrawable mDrawable; public MyVIEw(Context context) { super(context); rect = new Rect(0,100,100); mBitmap = loadBitmap(); mDrawable = new BitmapDrawable(context.getResources(),mBitmap); mDrawable.setTileModeXY(TileMode.REPEAT,TileMode.REPEAT); mDrawable.setBounds(rect); } @OverrIDe protected voID onDraw(Canvas canvas) { super.onDraw(canvas); mDrawable.draw(canvas); } public Bitmap loadBitmap() { // included only for example sake Paint paint = new Paint(); paint.setcolor(color.RED); Bitmap bm = Bitmap.createBitmap(10,10,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bm); canvas.drawRect(0,paint); paint.setStyle(Style.stroke); paint.setcolor(color.BLUE); canvas.drawRect(0,9,paint); return bm; }}
注意:
您还可以在xml中定义BitmapDrawable,而不是在代码中执行.
另外,如果你知道你正在通过getResources()加载drawable .getDrawable(resourceID)确实只是一个Bitmap,你可以将它转换为BitmapDrawable并在那里设置TileMode.一个la:
public class MyVIEw extends VIEw { Rect rect; BitmapDrawable mDrawable; public MyVIEw(Context context) { super(context); rect = new Rect(0,400,240); mDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.ic_launcher); mDrawable.setTileModeXY(TileMode.REPEAT,TileMode.REPEAT); mDrawable.setBounds(rect); this.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.ic_launcher)); } @OverrIDe protected voID onDraw(Canvas canvas) { super.onDraw(canvas); mDrawable.draw(canvas); }}
此示例显示正在拉伸的背景,并在其上方绘制平铺版本.
其他方式:
在x和y方向循环并重复将位图绘制到rect中:
public class MyVIEw extends VIEw { Rect rect; Bitmap mBitmap; public MyVIEw(Context context) { super(context); rect = new Rect(0,100); mBitmap = loadBitmap(); } @OverrIDe protected voID onDraw(Canvas canvas) { super.onDraw(canvas); final int bmWIDth = mBitmap.getWIDth(); final int bmHeight = mBitmap.getHeight(); for (int y = 0,height = rect.height(); y < height; y += bmHeight) { for (int x = 0,wIDth = rect.wIDth(); x < wIDth; x += bmWIDth) { canvas.drawBitmap(mBitmap,x,y,null); } } } public Bitmap loadBitmap() { // included only for example sake Paint paint = new Paint(); paint.setcolor(color.RED); Bitmap bm = Bitmap.createBitmap(10,paint); return bm; }}
我个人会去第一个(BitmapDrawable)方法.
总结以上是内存溢出为你收集整理的在Rect android上绘制一个平铺的位图全部内容,希望文章能够帮你解决在Rect android上绘制一个平铺的位图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)