gpt4 book ai didi

Android:如何:在静止图像(png 文件)中绘制形状和文本,然后放入 ImageView?

转载 作者:行者123 更新时间:2023-11-29 22:20:34 25 4
gpt4 key购买 nike

这是我当前的代码:

public class MallMapActivity extends Activity {
private final static String tag = "MallMapActivity";
private ImageView iv;
private final static String FLOOR = "F";
private final String storagePath = Environment.getExternalStorageDirectory() + "/appdata23";
private final String localMapsPath = storagePath + "/localMaps";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

iv = (ImageView)findViewById(R.id.imageview);
//iv.setScaleType(ScaleType.FIT_XY);

final LinearLayout levelLayout = (LinearLayout) findViewById(R.id.level_layout);
int levelSize = 8;
for (int i = 0; i < levelSize; i++) {
Button levelButton = new Button(this.getApplicationContext());
if(i==0) {
levelButton.setText(new StringBuffer((i+1)+"").append(FLOOR).append("(start)"));
} else if (i==7) {
levelButton.setText(new StringBuffer((i+1)+"").append(FLOOR).append("(end)"));
} else {
levelButton.setText(new StringBuffer((i+1)+"").append(FLOOR));
}
levelButton.setTag((i+1) + FLOOR);
levelButton.setId(i);
levelButton.setLayoutParams(
new RadioGroup.LayoutParams(0, RadioGroup.LayoutParams.WRAP_CONTENT, 1));
levelButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
int childCount = levelLayout.getChildCount();
int viewId = view.getId();

for (int j = 0; j < childCount; j++) {
Button btn = (Button)levelLayout.getChildAt(j);
if(viewId == j)
btn.setTextColor(Color.BLUE);
else
btn.setTextColor(Color.BLACK);
}

//sample data
double currentPixelX = 169d;
double currentPixelY = 347d;
Log.i(tag, " currentPixelX:" + currentPixelX);
Log.i(tag, " currentPixelY:" + currentPixelY);

int circleSize = 20;
Paint currentPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
currentPaint.setColor(Color.GREEN);
currentPaint.setAlpha(75);

String path = new StringBuffer(localMapsPath)
.append("/").append(view.getTag()).append(".png").toString();
File file = new File(path);
InputStream stream = null;
try {
stream = new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap mapBitmap = BitmapFactory.decodeStream(stream);

Canvas canvas = new Canvas(mapBitmap);
canvas.drawCircle(
Double.valueOf(currentPixelX).floatValue(),
Double.valueOf(currentPixelY).floatValue(),
circleSize, currentPaint);

iv.setImageBitmap(mapBitmap);
iv.invalidate();

}
});

levelLayout.addView(levelButton);
}
levelLayout.getChildAt(0).performClick();

}

}

错误内容如下:

ERROR/AndroidRuntime(8626): Uncaught handler: thread main exiting due to uncaught exception ERROR/AndroidRuntime(8626): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample/com.sample.MallMapActivity}: java.lang.IllegalStateException: Immutable bitmap passed to Canvas *constructor* ERROR/AndroidRuntime(8626): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2503) ERROR/AndroidRuntime(8626): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519) ERROR/AndroidRuntime(8626): at android.app.ActivityThread.access$2200(ActivityThread.java:123) ERROR/AndroidRuntime(8626): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870) ERROR/AndroidRuntime(8626): at android.os.Handler.dispatchMessage(Handler.java:99) ERROR/AndroidRuntime(8626): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(8626):
at android.app.ActivityThread.main(ActivityThread.java:4370) ERROR/AndroidRuntime(8626): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(8626): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(8626): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) ERROR/AndroidRuntime(8626): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) ERROR/AndroidRuntime(8626): at dalvik.system.NativeStart.main(Native Method) ERROR/AndroidRuntime(8626): Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas *constructor* ERROR/AndroidRuntime(8626): at android.graphics.Canvas.(Canvas.java:83) ERROR/AndroidRuntime(8626): at com.sample.MallMapActivity$1.onClick(MallMapActivity.java:110) ERROR/AndroidRuntime(8626): at android.view.View.performClick(View.java:2397) ERROR/AndroidRuntime(8626): at com.sample.MallMapActivity.onCreate(MallMapActivity.java:124) ERROR/AndroidRuntime(8626): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) ERROR/AndroidRuntime(8626): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2466) ERROR/AndroidRuntime(8626): ... 11 more ERROR/SemcCheckin(8626): Get crash dump level : java.io.FileNotFoundException: /data/semc-checkin/crashdump ERROR/SemcCheckin(1544): Get Crash Level : java.io.FileNotFoundException: /data/semc-checkin/crashdump

更新:

  1. mapBitmap.isMutable() 返回错误值。
  2. 为了让它可变,我更改了代码
Bitmap mapBitmap = BitmapFactory.decodeStream(stream);
Bitmap newMapBitmap = mapBitmap.copy(Bitmap.Config.ARGB_8888,

true); Canvas canvas = new Canvas(newMapBitmap);

最佳答案

进行此更改:您不能在不可变位图上绘制,而是可以创建一个

  Bitmap mapBitmap = BitmapFactory.decodeStream(stream);
//make a new mutable bitmap
Bitmap map = createBitmap(mapBitmap.getWidth(), mapBitmap.getHeight(),mapBitmap.getConfig());
//copy the pixel to it
int [] allpixels = new int [ mapBitmap.getHeight()*mapBitmap.getWidth()];

mapBitmap.getPixels(allpixels, 0, mapBitmap.getWidth(), 0, 0, mapBitmap.getWidth(),mapBitmap.getHeight());

map.setPixels(allpixels, 0, mapBitmap.getWidth(), 0, 0, mapBitmap.getWidth(), mapBitmap.getHeight());


Canvas canvas = new Canvas(map);

然后开始画画

关于Android:如何:在静止图像(png 文件)中绘制形状和文本,然后放入 ImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com