慕慕1489572
2020-02-09
默66
2018-08-02
这个问题在看前面的是不是哪儿有什么逻辑问题
默66
2018-08-02
默66
2018-08-01
默66
2018-08-01

导入第一个包,不是第二个
未来年薪百万的安卓工程师
2018-07-16
qq_PrinceOrKing_0
2018-06-09
说你的addView()方法引用了一个空对象,说明你的ImageBarnnerViewGroup是空
宝慕林1682237
2018-06-06
慕盖茨7836160
2018-04-03
是你看错了吧,没有拼错呀
慕盖茨7836160
2018-03-30
xml的设置语言要仔细了,出错不好看
qq_蒾婗旛兲噵_0
2018-03-07
判空一下,或者看下一节中有解决方案:设置一下监听
马东369
2018-01-18
安卓没那么简单的 学的越多 懂得越多。
马东369
2018-01-15
qq_大宇DTX_0
2017-12-14
qq_大宇DTX_0
2017-12-13
往下看完之后可能就会错误消除了,之后老师会讲解之前出现的BUG
你是夏夜的萤火
2017-12-12
你是夏夜的萤火
2017-12-11
qq_lovenewsweet_0
2017-11-21
RinoLi
2017-11-07
qq_星空独奏_0
2017-10-26
android:layout_height="wrap_content" //因为你将高度设置为包裹内容,那么图片有多高轮播图就有多高, //你可以设置为match_parent,这样就可以占满整个屏幕了
慕粉3499826
2017-10-22
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.example.administrator.asapplication.ImageVariable;
import com.example.administrator.asapplication.R;
import java.util.List;
public class ImageBarnnerFramLayout extends FrameLayout implements ImageBarnnerViewGroup.ImageBarnnerViewGroupLisnner, ImageBarnnerViewGroup.ImageBarnnerLister{
private ImageBarnnerViewGroup imageBarnnerViewGroup;
private LinearLayout linearLayout;
private FramLayoutLisenner lisenner;
public FramLayoutLisenner getLisenner() {
return lisenner;
}
public void setLisenner(FramLayoutLisenner lisenner) {
this.lisenner = lisenner;
}
public ImageBarnnerFramLayout(@NonNull Context context) {
super(context);
initImageBarnnerViewGroup();
initDotLinearLayout();
}
public ImageBarnnerFramLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initImageBarnnerViewGroup();
initDotLinearLayout();
}
public ImageBarnnerFramLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initImageBarnnerViewGroup();
initDotLinearLayout();
}
public void addBitmap( List<Bitmap> list){
for(int i = 0; i<list.size(); i++){
Bitmap bitmap = list.get(i);
addBitmapToImageBarnnerViewGroup(bitmap);
addDotToLinearlayout();
}
}
private void addBitmapToImageBarnnerViewGroup(Bitmap bitmap){
ImageView iv = new ImageView(getContext());
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
iv.setLayoutParams(new ViewGroup.LayoutParams(ImageVariable.WIDTH, ImageVariable.HEIGHT/4));
iv.setImageBitmap(bitmap);
imageBarnnerViewGroup.addView(iv);
}
private void addDotToLinearlayout(){
ImageView iv = new ImageView(getContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 5, 5 ,5);
iv.setLayoutParams(lp);
iv.setImageResource(R.drawable.dot_normal);
linearLayout.addView(iv);
}
/**
* 初始化我们自定义图片轮播图功能的核心类
*/
private void initImageBarnnerViewGroup(){
imageBarnnerViewGroup = new ImageBarnnerViewGroup(getContext());
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
imageBarnnerViewGroup.setLayoutParams(lp);
imageBarnnerViewGroup.setBarnnerViewGroupLisnner(this);//这里就是将Lisnner,传递给Framlayout
imageBarnnerViewGroup.setLister(this);
addView(imageBarnnerViewGroup);
}
/**
* 初始化我们的底部圆点布局
*/
private void initDotLinearLayout(){
linearLayout = new LinearLayout(getContext());
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 40);
linearLayout.setLayoutParams(lp);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);//方向:水平居中
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setBackgroundColor(Color.RED);//轮播图圆点的背景颜色
addView(linearLayout);
FrameLayout.LayoutParams layoutParams = (LayoutParams) linearLayout.getLayoutParams();
layoutParams.gravity = Gravity.BOTTOM;
linearLayout.setLayoutParams(layoutParams);
//版本3.0以后的用setAlpha(),3.0之前用的是setAlpha(),但是调用者不同
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
linearLayout.setAlpha(0.5f);
}else{
linearLayout.getBackground().setAlpha(100);
}
}
@Override
public void selectImage(int index) {
int count = linearLayout.getChildCount();
for (int i = 0; i < count; i++) {
ImageView iv = (ImageView) linearLayout.getChildAt(i);
if( i == index){
iv.setImageResource(R.drawable.dot_select);
}else {
iv.setImageResource(R.drawable.dot_normal);
}
}
}
@Override
public void clickImageIndex(int pos){
lisenner.clickImageIndex(pos);
}
public interface FramLayoutLisenner{
void clickImageIndex(int pos);
}
}
圣见兮月
2017-10-18
抄错了 不是children 而是childWidth 尴尬
圣见兮月
2017-10-17
呜呜呜呜www
2017-10-12
应该是导入错了包 ,导入的包是这个import android.os.Handler;
叮叮咚咚响当当
2017-09-15
也许可能
慕沐2742265
2017-09-13
慕田峪7532397
2017-08-25
对于OOM,其实最重要的是注意不要Memory Leak。而Memory Leak是会有多个方面会引起的,比如Drawable, RemoteViews, Receiver, Cursor,InputStream, MediaPlayer等,此外,如果使用JNI也会因为C或C++的代码导致Memory Leak。
除了Memory Leak,大数据量的操作也会导致OOM,比如之前其他回答提到的Bitmap,还有ListAdapter,如果在getView时处理不当,也很容易导致OOM,所以在ListAdapter时应该尽量使用convertView。
最后,可以用android.os.StrictMode以及Eclipse的MAT工具来进行OOM和Memory Leak的检测。
作者:Billy Cui
链接:https://www.zhihu.com/question/19772290/answer/13325580
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
慕莱坞7230865
2017-08-24
慕侠1074980
2017-08-23
上次你的手指滑动界面 滚动是否已经结束
qq_好想再爱你_03775484
2017-08-09
预先加载图片吧