android - (Android) 在静态最终常量中保存资源是否安全? (现在资源不是静态最终的)

标签 android android-resources

ADT 14 之后,R 类值不再是“static final int”,而只是“static int”。 我想使用常量作为“静态最终”。像下面这样

public static final int exampleNameId = R.string.exampleName;

运行应用程序后,如果 Android 系统想要更改 R.string.exampleName 可能会出现问题。因为 exampleNameId 是最终的所以系统无法更改值。

如何解决这个问题?

最佳答案

如果您有任何实现 Shape 接口(interface)的东西(例如 Polygon)。您可以获得该形状的 PathIterator,它提供具有可配置粒度的轮廓

以下示例获取一个展平 PathIterator,以避免处理贝塞尔曲线,而只需使用drawLine 来重现轮廓。由于绘图中没有间隙,因此我不必担心使用实际的迭代器命令来重新定位开始和停止绘图位置(即提笔和落笔等)。

要完全理解这一点,您需要阅读 Java API 文档中的一些方法。


    import java.awt.BasicStroke;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.PathIterator;

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;

    public class Outline extends JPanel {

       JFrame       frame = new JFrame();
       PathIterator iter;

       public static void main(String[] args) {
          SwingUtilities.invokeLater(() -> new Outline().start());
       }

       public void start() {
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.add(this);
          setPreferredSize(new Dimension(500, 500));
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
          demo();
       }

       public void demo() {
          double smajAxis = 200;
          double sminAxis = 100;
          Ellipse2D.Double oval = new Ellipse2D.Double(250 - smajAxis / 2,
                            250 - sminAxis / 2, smajAxis, sminAxis);
          iter = oval.getPathIterator(null, .02);
          repaint();

       }
       public void paintComponent(Graphics g) {
          super.paintComponent(g);
          Graphics2D g2d = (Graphics2D) g;
          g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
          g2d.setStroke(new BasicStroke(2));
          double[] start = new double[2];
          double[] end = new double[2];
          iter.currentSegment(start);
          int x1 = (int) start[0];
          int y1 = (int) start[1];
          int savex1 = x1;
          int savey1 = y1;
          iter.next();
          while (!iter.isDone()) {
             iter.currentSegment(end);
             int x2 = (int) end[0];
             int y2 = (int) end[1];
             g2d.drawLine(x1, y1, x2, y2);
             x1 = x2;
             y1 = y2;
             iter.next();
          }
          g2d.drawLine(x1, y1, savex1, savey1);

       }
    }

关于android - (Android) 在静态最终常量中保存资源是否安全? (现在资源不是静态最终的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57240531/

相关文章:

android - 使用 Android、App 引擎 + 数据存储存储个人资料图像的最佳方式

java - 如何通过单击按钮更改 webview 的 url?

android - Xamarin 控制堆叠

java - 有没有类似Android的资源系统的更小规模的?

Android 资源阿拉伯语本地化

android - 我的广告未显示,广告加载失败 : 3

android - 磁盘上不存在 .apk 文件,但确实存在

android - R.layout.listview 是否与 R.id.listview 相同

android - 随机获取 Android Material Design 颜色

java - 使用资源引用属性序列化类实例是否安全?