Articles of 视图

Android – 如何允许水平和垂直滚动

ScrollView只允许垂直滚动,而Horizo​​ntalScrollView只允许水平滚动,但两者都没有类。 这似乎是Android UI中相当大的差距。 允许这个的任何技巧?

Android 2.1 View的getDrawingCache()方法始终返回null

我正在使用Android 2.1并遇到以下问题:使用方法View.getDrawingCache()始终返回null。 getDrawingCache()应返回一个Bitmap,它是View内容的表示。 示例代码: public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final View view = findViewById(R.id.ImageView01); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); final Bitmap bmp = view.getDrawingCache(); System.out.println(bmp); } 我已经尝试过不同的方法来配置View对象来生成绘图缓存(例如View.setWillNotDraw(boolean)和View.setWillNotCacheDrawing(boolean) ),但没有任何效果。 什么是正确的方式,或者我做错了什么? PS:在实际代码中,我想在像RelativeLayout这样的ViewGroup上应用getDrawingCache()。 使用ViewGroup时行为是否相同?

将位图的大小调整为固定值,但不更改宽高比

我正在寻找以下问题的解决方案:如何将Bitmap的大小更改为固定大小(例如512×128)。 必须保留位图内容的宽高比。 我认为它应该是这样的: 创建一个空的512×128位图 缩小原始位图以适应512×128像素并保持纵横比 将缩放复制到空位图(居中) 实现这一目标的最简单方法是什么? 所有这一切的原因是,当图像的纵横比不同时, GridView混淆布局。 这是一个截图(除最后一个之外的所有图像的纵横比为4:1): 截图

Gallery ImageAdapter convertView始终为null

我正在使用带有ImageAdapter的Gallery来加载ImageViews,从我的资源中提取图像。 我的问题是,传递给我的适配器中的getView()方法的convertView始终为null。 这意味着每次调用getView()时都会创建一个新的ImageView。 这会导致可怕的性能,因为GC不断运行以擦除所有这些创建的并且不再使用ImageView。 这显然是一个已知的错误: Gallery的视图缓存已被破坏; 从不转换观点。 。 我的两个首选解决方案是1.处理适配器本身的视图缓存,并处理正确重用它们所需的所有逻辑。 或者2.包含我自己的Gallery小部件副本并尝试修复它以便正确返回回收的视图。 我已经开始实现第一选项,但我很快意识到我并不完全知道如何制定该操作背后的所有逻辑。 我开始认为选项二可能更容易。 我在这里find了Gallery小部件的代码: http : //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/Gallery.java 我不完全理解它,但我可以看到它正在呼唤 child = mAdapter.getView(position, null, this); 在745行。我(在黑暗中拍摄)猜测这是问题的根源。 有没有人有这个bug的经验。 或者,任何人都可以指出我正确的方向,以确定回收器的情况如何工作,以便我可以调整此小部件以正常工作? 或者甚至提出一些我可能会忽略的替代选项。 编辑:我find的最佳解决方案是一个名为EcoGallery的实现。 我能在网上find它的唯一地方就在这里 。 要使其正常工作,您必须将每个块放在项目中的正确位置。

android 3.x中的拖放导致拖动后的小数字后面的illegalStateException

在Android 3.x上有拖放机制的问题:在做了一些拖动(比如30次拖动)之后会产生exception(参见附件链接) https://groups.google.com/forum/#!msg/android-platform/2APvO248NNY/rKI-5dCT8XcJ (我在日志中收到与该post相同的内容..) android技术人员在那里回答它是API中的错误,并说避免问题的唯一方法是调用垃圾收集器。 我做的。 exception没有被抛出,但过了一段时间(比如更多30-40次拖动)android停止从某种原因调用drop事件。 我试图通过释放所有资源/canvas/绘图缓存/回收位图来“刷新”所有视图并重新创建它们并且它没有帮助(不再抛出exception – 但仍然有一些拖拽掉落事件’工作) “帮助”唯一的事情是关闭活动并重新启动它。 有人以某种方式解决了这个问题,或者有一个简单的替代方案??? (旁边实现我自己的拖放function..) 我想得到解决方案,不会强迫我重新启动或重新创建任何不想要的东西.. 这里是演示错误的示例代码 (没有演示我在使用System.GC后对drop事件的问题所说的部分): public class DragandDropExampleActivity extends Activity { private boolean mIsBeenDragged = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ImageView imageViewToDRag = (ImageView) findViewById(R.id.image_view_to_drag); imageViewToDRag.setClickable(true); imageViewToDRag.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() […]

Android force Fragment重建View

我有一个简单的应用程序有两个片段,当处于横向模式时,两个片段并排显示,并在纵向我显示片段A,然后如果他们选择一个选项,启动一个显示片段B的活动。我的问题是当我我处于纵向模式并显示片段B,如果用户选择了一个菜单选项,我想要刷新或重绘与片段B关联的视图,并且无法理解如何使其工作。 我尝试了getView方法和getLayoutInflater方法,但屏幕没有改变,因为我认为我正在创建一个新视图。 我还试图获得对Fragment A的引用,我认为我可以调用它的例程来构建一个新的片段并替换Fragment B但是因为它没有被显示而无法获得它的引用。 我真正需要做的是强制再次调用onCreateView方法来为新视图充气,但我尝试了几种方法来尝试这样做,但无法再次调用onCreateView。 有关如何做到这一点的想法?

负填充的影响

我刚刚开始学习android,我有一个关于负填充的问题。 负填充究竟是如何影响视图的? 另外,假设我引入了一个“-5dp”的bottomPadding 。 这是否延长了填充边界5dp? 所有帮助赞赏! 🙂

getHeight()vs getLayoutParams()。height

getHeight()和getLayoutParams().height View getLayoutParams().height有什么区别? 我有一个View (GoogleAdView),我想隐藏它,我将getLayoutParams().height设置为零,但广告的高度( ad.getHeight() )不为零。 有没有办法隐藏View以便它不占用布局中的空间? 我试图将其可见性设置为GONE或将ad.getLayoutParams().height设置为零,但这不起作用。

带animation的WindowManager(可能吗?)

有没有办法用WindowManager使用Animation(在android的项目中)给视图充气? 即使使用网站中的示例,我也无法做到! 我用了很多例子,但都没有用! public BannerLayout(Activity activity, final Context context) { super(context); this.context = context; final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.popupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null); this.popupLayout.setVisibility(GONE); this.setActive(false); wm.addView(this.popupLayout, params); context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } private void show(){ Animation in = AnimationUtils.loadAnimation(this.context, android.R.anim.fade_in); this.popupLayout.setAnimation(in); this.setActive(true); […]

android拖动视图流畅

我必须在屏幕上拖一些视图。 我正在通过从触摸侦听器更改ACTION_MOVE上的运动事件的布局参数的左侧和顶部来修改其位置。 有没有办法“拖动”项目更顺利? 因为这种“拖动”根本就不顺利……这是代码 public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: dx = (int) motionEvent.getX(); dy = (int) motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: int x = (int) motionEvent.getX(); int y = (int) motionEvent.getY(); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams(); int left = lp.leftMargin + (x – dx); int top = lp.topMargin + […]