我有一个Bitmap大小,320x480我需要在不同的设备屏幕上拉伸它,我尝试使用这个:
Rect dstRect = new Rect();
canvas.getClipBounds(dstRect);
canvas.drawBitmap(frameBuffer, null, dstRect, null);
Run Code Online (Sandbox Code Playgroud)
它工作,图像像我想要的那样填满整个屏幕,但图像像素化,看起来很糟糕.然后我尝试了:
float scaleWidth = (float) newWidth / width;
float scaleHeight = (float) newHeight / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(frameBuffer, 0, 0,
width, height, matrix, true);
canvas.drawBitmap(resizedBitmap, 0, 0, null);
Run Code Online (Sandbox Code Playgroud)
这次它看起来很完美,漂亮和流畅,但是这段代码必须在我的主游戏循环中,并且Bitmap每次迭代创建它都会使它非常慢.如何调整图像大小以使其不会像素化并快速完成?
找到解决方案:
Paint paint = new Paint();
paint.setFilterBitmap();
canvas.drawBitmap(bitmap, matrix, paint);
Run Code Online (Sandbox Code Playgroud) 我有一个片段,需要建立自己的操作栏:
public class CalendarFragment extends Fragment {
public CalendarFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().supportInvalidateOptionsMenu();
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.calendar_menu1, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.CENTER);
textView.setText("Calendar Fragment");
return textView;
}
Run Code Online (Sandbox Code Playgroud)
}
问题是它没有创建一个包含来自calendar_menu1的项目的新菜单,只是将其中的项目添加到旧菜单,就像invalidateOptionsMenu不起作用(我也试过getActivity().invalidateOptionsMenu())
我有一个需要在新活动中显示的位图,所以我想它并在打开的活动中我尝试加载它但我得到一个nullPointerException.在这里我保存图像:
File cacheDir = getBaseContext().getCacheDir();
File f = new File(cacheDir, "pic");
try {
FileOutputStream out = new FileOutputStream(
f);
pic.compress(
Bitmap.CompressFormat.JPEG,
100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Intent intent = new Intent(
AndroidActivity.this,
OpenPictureActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
然后在新活动中我尝试打开它:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
File cacheDir = getBaseContext().getCacheDir();
File f = new File(cacheDir, "pic");
FileInputStream fis = null;
try {
fis = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,显示电视指南的频道列表.我的UI是由许多不同宽度的自定义视图组成的,这些视图显示了电视节目,所有这些自定义视图都被添加到水平滚动视图中,并添加到滚动视图中,因此我的视图可以滚动到左右两个维度 - 顶部 - 下.这一切都很好,直到我添加添加了很多视图,它开始慢下来.所以我需要一种方法来回收像listiew那样的滚动视图中的视图,也许有一个定制的scrollview可以做到这一点,或者有人知道如何做到这一点,奇怪的是scrollview不是由gridview和listview等适配器备份的.
我试图在机器人上写一个游戏,我照顾不同的屏幕分辨率的方式是我制作一个目标分辨率(320x480)的位图,从它制作一个画布,并使用固定坐标绘制其上的所有元素,然后我只是在surfaceView画布上绘制此位图,它在不同的屏幕上重新缩放.问题是,当我在框架上绘制内容时,即使框架与位图的大小相同,位图也会超出范围.(位图是320x480,它得到拉伸,不适合屏幕)这是代码:
public class Graphics {
private Bitmap frameBuffer, grid;
private Canvas canvas;
public Graphics(Context context) {
frameBuffer = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
canvas = new Canvas(frameBuffer);
grid = BitmapFactory.decodeResource(context.getResources(),
R.drawable.grid);
}
public Bitmap present() {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(grid, 0, 0, null);
return frameBuffer;
}
Run Code Online (Sandbox Code Playgroud)
和SurfaceView类:
public class GameView extends SurfaceView implements Runnable {
private SurfaceHolder holder;
private Boolean running;
private Thread renderThread;
private Graphics graphics;
public GameView(Context context, Graphics graphics) {
super(context);
this.holder = getHolder();
this.graphics = graphics;
}
public void resume() …Run Code Online (Sandbox Code Playgroud) 我需要将屏幕内容移到左侧,这样我就可以为右侧的幻灯片菜单腾出空间

这是代码:
// modify content layout params
try {
content = ((LinearLayout) act.findViewById(android.R.id.content)
.getParent());
} catch (ClassCastException e) {
/*
* When there is no title bar
* (android:theme="@android:style/Theme.NoTitleBar"), the
* android.R.id.content FrameLayout is directly attached to the
* DecorView, without the intermediate LinearLayout that holds the
* titlebar plus content.
*/
content = (FrameLayout) act.findViewById(android.R.id.content);
}
FrameLayout.LayoutParams pr = (android.widget.FrameLayout.LayoutParams) content
.getLayoutParams();
pr.rightMargin = menuSize;
content.setLayoutParams(pr);
// add the slide menu to parent
parent = (FrameLayout) content.getParent();
try { …Run Code Online (Sandbox Code Playgroud) 我需要在imageview的中间放置一个文本视图,所以我有这个代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_background"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/menu_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lines="1" />
<ImageView
android:id="@+id/menu_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:layout_marginBottom="@dimen/menu_icon_margin_top_bottom"
android:layout_marginRight="@dimen/menu_icon_margin_right"
android:layout_marginTop="@dimen/menu_icon_margin_top_bottom" />
<TextView
android:id="@+id/notif_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/menu_icon"
android:layout_alignLeft="@id/menu_icon"
android:layout_alignRight="@id/menu_icon"
android:layout_alignTop="@id/menu_icon"
android:lines="1"
android:text="69"
android:textColor="@android:color/white" />
Run Code Online (Sandbox Code Playgroud)
我需要最后的textview始终在menu_icon ImageView的中心,但我的methdot不工作它只是把它放在左上角.