小编use*_*941的帖子

如何有效地调整位图的大小,并在android中失去质量

我有一个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)

android resize canvas bitmap surfaceview

14
推荐指数
1
解决办法
3万
查看次数

invalidateOptionsMenu不会从片段调用

我有一个片段,需要建立自己的操作栏:

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())

android android-actionbar

11
推荐指数
2
解决办法
6262
查看次数

Android,从不同的活动中保存和加载缓存中的位图

我有一个需要在新活动中显示的位图,所以我想它并在打开的活动中我尝试加载它但我得到一个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)

android caching bitmap android-activity

9
推荐指数
1
解决办法
1万
查看次数

在滚动视图中回收视图

我有一个应用程序,显示电视指南的频道列表.我的UI是由许多不同宽度的自定义视图组成的,这些视图显示了电视节目,所有这些自定义视图都被添加到水平滚动视图中,并添加到滚动视图中,因此我的视图可以滚动到左右两个维度 - 顶部 - 下.这一切都很好,直到我添加添加了很多视图,它开始慢下来.所以我需要一种方法来回收像listiew那样的滚动视图中的视图,也许有一个定制的scrollview可以做到这一点,或者有人知道如何做到这一点,奇怪的是scrollview不是由gridview和listview等适配器备份的.

这就是我的UI看起来的样子

android view adapter scrollview

8
推荐指数
1
解决办法
4916
查看次数

缩放位图以适合画布

我试图在机器人上写一个游戏,我照顾不同的屏幕分辨率的方式是我制作一个目标分辨率(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)

scaling android bitmap surfaceview

7
推荐指数
1
解决办法
5809
查看次数

如何在屏幕外移动布局内容android

我需要将屏幕内容移到左侧,这样我就可以为右侧的幻灯片菜单腾出空间 在此输入图像描述

这是代码:

// 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)

layout android view

5
推荐指数
1
解决办法
9214
查看次数

在imageview android中间插入textview

我需要在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不工作它只是把它放在左上角.

layout android textview imageview

5
推荐指数
1
解决办法
8369
查看次数