解决webview加载flash视频黑屏的方法
今天,项目需求修改,需要加载flash视频,本以为很简单,写好代码:
webView = (WebView) view.findViewById(R.id.web);
WebSettings settings = webView.getSettings();
settings.setPluginState(WebSettings.PluginState.ON);
然后
webView.loadUrl(“你的URL”);
然后满心欢喜的去看效果,结果,如果闭着眼睛,是很完美的,因为音乐很优美,但是睁眼一看!我去 黑屏!,然后找原因吧,百度各种方法,让我真正的感受了百度的坑,和百度的神,坑在于许多百度的内容,都是重复的,更有甚者,直接复制的。
神,在于我终于再一次的找到了问题的原因!!
现在说一下,我,webview加载flash黑屏的原因!不是因为没启动插件,不是因为没在application节点开启硬件加速!
而是!在webview布局处,写错了一行代码:
android:layerType="software"
把这个属性,改成:
android:layerType="hardware"
解决了问题,希望各位看官能解决自己的问题
在安卓中ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本,下面我们来看一个ListView中嵌套ListView的例子吧。
平常我们使用ListView已是司空见惯,但是当ListView的item也是一个ListView的时候就显得有些棘手了,或是遇到数据加载显示不出来,或是遇到只加载一个item,或是遇到滑动混乱数据混乱等等问题,我想说的是ListView的item要使用自定义的ListView就可以解决这一系列问题。
MainActivity:
package zm.listviewnesting;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private ListView list_one;
private AreaAdapter areaAdapter;
private List<AreaEntity> areaEneities = new ArrayList<AreaEntity>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list_one = (ListView) findViewById(R.id.list_one);
for (int i = 0; i < 10; i++) {
AreaEntity areaEntity = new AreaEntity(i + "", "大众");
areaEneities.add(areaEntity);
}
getdata();
}
private void getdata() {
areaAdapter = new AreaAdapter(areaEneities, this);
list_one.setAdapter(areaAdapter);
}
class AreaAdapter extends BaseAdapter {
private List<AreaEntity> areaEneity;
private LayoutInflater mInflater;
private Context mContext;
public AreaAdapter(List<AreaEntity> areaEneities, Context context) {
super();
this.areaEneity = areaEneities;
this.mInflater = LayoutInflater.from(context);
this.mContext = context;
}
@Override
public int getCount() {
return areaEneity.size();
}
@Override
public Object getItem(int position) {
return areaEneity.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_list_one, null);
holder = new ViewHolder();
holder.tv_car = (TextView) convertView.findViewById(R.id.tv_car);
holder.list_two = (MyListView) convertView.findViewById(R.id.list_two);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_car.setText(areaEneity.get(position).getArea());
List<AreaEntity> areaEneities = new ArrayList<AreaEntity>();
AreaAdapterTwo areaAdapter = new AreaAdapterTwo(areaEneities, mContext);
holder.list_two.setAdapter(areaAdapter);
for (int i = 0; i < 3; i++) {
AreaEntity areaEntity = new AreaEntity(i + "", "L15");
areaEneities.add(areaEntity);
}
return convertView;
}
class ViewHolder {
private TextView tv_car;
private MyListView list_two;
}
}
class AreaAdapterTwo extends BaseAdapter {
private List<AreaEntity> areaEneity;
private LayoutInflater mInflater;
private Context mContext;
public AreaAdapterTwo(List<AreaEntity> areaEneities, Context context) {
super();
this.areaEneity = areaEneities;
this.mInflater = LayoutInflater.from(context);
this.mContext = context;
}
@Override
public int getCount() {
return areaEneity.size();
}
@Override
public Object getItem(int position) {
return areaEneity.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_list_two, null);
holder = new ViewHolder();
holder.tv_count = (TextView) convertView.findViewById(R.id.tv_count);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_count.setText(areaEneity.get(position).getArea());
return convertView;
}
class ViewHolder {
private TextView tv_count;
}
}
}
自定义ListView:=====MyListView:
package zm.listviewnesting;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* 作者:joy on 2015/11/27 10:23
*/
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
直接在布局文件中引用就可以了,注意包名:
<zm.listviewnesting.MyListView
android:id="@+id/list_two"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
废话不多说,直接上代码:
private WebView mWebView;
mWebView.getSettings().setJavaScriptEnabled(true);//这个没的说,首先得支持js
mWebView.loadUrl("www.111cn.net");
mWebView.addJavascriptInterface(new MyJavascriptInterface(this), "imagelistner");//自定义一个MyJavascript接口
mWebView.setWebViewClient(new MyWebViewClient());//MyWebViewClient继承于WebViewClient
MyJavascriptInterface:
// js通信接口
public class MyJavascriptInterface {
private Context context;
public MyJavascriptInterface(Context context) {
this.context = context;
}
@JavascriptInterface //值得注意的是,当你的openImage方法没有被执行,也就是说mWebView.addJavascriptInterface没有作用
那么就请在这里加上@JavascriptInterface,加之前记得先导入
public void openImage(String img) {
System.out.println(img);
Intent intent = new Intent();
intent.putExtra("image", img);
intent.setClass(context, ShowWebImageActivity.class);
context.startActivity(intent);
System.out.println(img);
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
// html加载完成之后,添加监听图片的点击js函数
addImageClickListner();//这个方法在下面
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageStarted(view, url, favicon);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
}
// 注入js函数监听
private void addImageClickListner() {
// 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递url过去
mWebView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\"); " +
"for(var i=0;i<objs.length;i++) " +
"{"
+ " objs[i].onclick=function() " +
" { "
+ " window.imagelistner.openImage(this.src); " +
" } " +
"}" +
"})()");
}
显示图片的类
package cn.zmit.xiangrikui.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import cn.zmit.xiangrikui.R;
public class ShowWebImageActivity extends Activity {
private String imagePath = null;
private ImageView imageView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_webimage);
imagePath = getIntent().getStringExtra("image");
imageView = (ImageView) findViewById(R.id.show_webimage_imageview);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
com.squareup.picasso.Target target = new com.squareup.picasso.Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageBitmap(big(bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(this).load(imagePath).into(target);
}
public Bitmap big(Bitmap b) {
Display d = (ShowWebImageActivity.this).getWindowManager().getDefaultDisplay();
int x = d.getWidth();//当前屏幕宽度 px
int y = d.getHeight();//当前屏幕高度 px
int w = b.getWidth();
int h = b.getHeight();
float sx = (float) x / w;//要强制转换,不转换我的在这总是死掉。
float sy = (float) y / h;
float total=Math.min(sx,sy);
Matrix matrix = new Matrix();
matrix.postScale(total, total); // 长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(b, 0, 0, w,
h, matrix, true);
return resizeBmp;
}
}
之前没有用到过这样需求的listview,最近项目需求,所以写了一下,很顺利,下面上代码
1、activity_test
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_one"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="一年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_two"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="二年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_three"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="三年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_four"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="四年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_five"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="五年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/view"></View>
<ListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
2、item_test
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_one"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="一年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_two"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="二年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_three"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="三年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_four"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="四年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
<TextView
android:id="@+id/tv_five"
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center"
android:text="五年级"
android:textColor="@color/black"
android:textSize="@dimen/medium_text_size" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/view"></View>
</LinearLayout>
</LinearLayout>
3、TestActivity(包括了Adapter)
package cn.zmit.frame.activity;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import cn.zmit.frame.R;
/**
* Created by kyle on 2016/5/13 0013.
*/
public class TestActivity extends Activity {
private List<String[]> lists = new ArrayList<>();
ListView mLvTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tests);
mLvTest= (ListView) findViewById(R.id.lv_test);
for(int i=0;i<15;i++){
String[]strings={“蛮王”+i,”剑圣”+i,”赵信”+i,”小龙”+i,”大龙”+i};
lists.add(strings);
}
mLvTest.setAdapter(new MyAdapter());
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return lists.size();
}
@Override
public Object getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder holder;
if (convertView == null) {
convertView = View.inflate(TestActivity.this, R.layout.item_test, null);
holder = new MyHolder();
holder.mTvOne = (TextView) convertView.findViewById(R.id.tv_one);
holder.mTvTwo = (TextView) convertView.findViewById(R.id.tv_two);
holder.mTvThree = (TextView) convertView.findViewById(R.id.tv_three);
holder.mTvFour = (TextView) convertView.findViewById(R.id.tv_four);
holder.mTvFive = (TextView) convertView.findViewById(R.id.tv_five);
convertView.setTag(holder);
}else {
holder= (MyHolder) convertView.getTag();
}
holder.mTvOne.setText(lists.get(position)[0]);
holder.mTvTwo.setText(lists.get(position)[1]);
holder.mTvThree.setText(lists.get(position)[2]);
holder.mTvFour.setText(lists.get(position)[3]);
holder.mTvFive.setText(lists.get(position)[4]);
return convertView;
}
}
private class MyHolder {
private TextView mTvOne;
private TextView mTvTwo;
private TextView mTvThree;
private TextView mTvFour;
private TextView mTvFive;
}
}
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
一直都没有接触排序,突然要实现对List的排序,找了一下资料,发现Collections.sort( )这个方法。
Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 。
规则用来判断对象,算法则考虑如何进行排序。
对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定要定义排序规则。方式有两种:
第一种,java.lang下面的一个接口:Comparable。可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o)
其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序。
如当前对象>o对象,则返回值>0;
如当前对象=o对象,则返回值=0;
如当前对象<o对象,则返回值<0;
第二种方式,java.util下有一个Comparator(比较器)。它拥有compare( )方法,用来比较两个对象。
至此,我采用了第二种方式。下面是定义的排序规则:
public class JsonComparator implements Comparator<NewRecordEntity>{
@Override
public int compare(NewRecordEntity arg0, NewRecordEntity arg1) {
String data1=TimeStamp2Date(arg0.getOldtime()+"", "yyyy-MM-dd HH:mm:ss");
String data2=TimeStamp2Date(arg1.getOldtime()+"", "yyyy-MM-dd HH:mm:ss");
//设定时间的模板
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//得到指定模范的时间
try {
Date d1 = sdf.parse(data1);
Date d2 = sdf.parse(data2);
if(d1.getTime() - d2.getTime()>0){
return -1;
}else if(d1.getTime() - d2.getTime()<0){
return 1;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public String TimeStamp2Date(String timestampString, String formats){
Long timestamp = Long.parseLong(timestampString)*1000;
String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp));
return date;
}
}
使用:
//排序操作
JsonComparator pComparator = new JsonComparator();
Collections.sort(list, pComparator);
这样就实现了排序功能。如果是对数组进行排序,同样的原理,只不过换成Arrays.sort()方法。
相关文章
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
用js的document.write输出的广告无阻塞加载的方法
一、广告代码分析很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接。复制代码 代码如下:<script type="text/javascript" src="http://gg.5173.com/adpolestar/5173/;ap=2EBE5...2014-06-07- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- 当页面打开时我们需要执行一些操作,这个时候如果我们选择使用jquery的话,需要重写他的3中方法,自我感觉没什么区 别,看个人喜好了,第二种感觉比较简单明了: 第一种: 复制代码 代码如下: <script type="text/javas...2014-06-07
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
- 这篇文章主要介绍了解决IDEA插件市场Plugins无法加载的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-21
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25